2012-02-08 25 views
1

我對使用C++創建對象的方式有疑問。如果我定義一個類,說CSomeClass,我可以使用下面的行創建的CSomeClass一個新的對象:創建新對象時使用的C++運算符

CSomeClass* pSomeClass = new CSomeClass; 

在這種情況下我也有控制的新目標是通過覆蓋創建方式的能力運營商。我的問題是,當我使用以下代碼行時

CSomeClass pSomeClass; 

在這種情況下使用什麼操作符來創建對象。我希望能夠以與新運營商相同的方式覆蓋該特定運營商,但我不確定這將是什麼。如果這個問題不太合理,請讓我知道,我會澄清。謝謝。

+1

只能覆蓋運營商新的負責內存分配,而不是新的運營商。 – Alanmars 2012-02-08 01:54:41

回答

3

在第二種情況下,不涉及操作員。沒有什麼可以重寫。

+0

我需要這樣做的原因是,我可以確定該對象寫入哪個堆。在我的例子中,如何在第二行的情況下如何做到這一點?感謝大家的反饋。 – user399540 2012-02-08 03:12:08

+1

@ user399540你不能在第二行的棧上堆棧。 – P3trus 2012-02-08 05:21:33

+0

@ user399540:什麼P3trus說 - 爲什麼你會關心對象的生活?你想要解決什麼實際問題? – 2012-02-08 08:14:26

2

能夠覆蓋後者沒有意義。 「new」運算符是可覆蓋的,例如,可以使用slab分配器等進行優化分配。但是,當您在堆棧上創建變量時,不會決定將其放置在何處。

0

如果要創建對象的創建,則要創建默認構造函數,而不要覆蓋new運算符。

在你的頭文件:

class CSomeClass 
{ 
public: 
    CSomeClass(); 
} 

,然後在定義文件:

CSomeClass::CSomeClass() 
{ 
    // Initialize your object here 
} 

也就是說,除非我誤解了:-)

0
CSomeClass* pSomeClass = new CSomeClass; 

在這裏,你的問題創建一個類CSomeClass的動態對象。編譯器調用無參數的構造函數。

CSomeClass pSomeClass; 

您可以創建CSomeClass類的非動態對象。編譯器完全調用相同的無參數構造函數。

您可以使用new運算符用於動態變量分配內存:

int *number= new int(1); 
相關問題