2012-02-08 88 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);