创建新对象时使用的C ++运算符

时间:2012-02-08 01:41:02

标签: c++

我对使用C ++创建对象的方式有疑问。如果我定义了一个类,比如CSomeClass,我可以使用以下行创建CSomeClass的新对象:

CSomeClass* pSomeClass = new CSomeClass;

在这种情况下,我还可以通过覆盖 new 运算符来控制新对象的创建方式。我的问题是,当我使用以下代码行时

CSomeClass pSomeClass;

在这种情况下,使用什么运算符来创建对象。我希望能够以与新运算符相同的方式覆盖该特定运算符,但我不确定它是哪个。如果这个问题没有意义,请告诉我,我会澄清。感谢。

4 个答案:

答案 0 :(得分:3)

在第二种情况下,不涉及操作员。没有什么可以覆盖。

答案 1 :(得分:2)

能够覆盖后者是没有意义的。 “new”运算符可以覆盖,例如,允许使用slab分配器等进行优化。但是当你在堆栈上创建一个变量时,就不会决定放置它的位置。 / p>

答案 2 :(得分:0)

如果要创建对象的创建,则需要创建默认构造函数,而不是覆盖new运算符。

在您的标头文件中:

class CSomeClass
{
public:
    CSomeClass();
}

然后在你的定义文件中:

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

也就是说,除非我误解了这个问题: - )

答案 3 :(得分:0)

CSomeClass* pSomeClass = new CSomeClass;

在这里,您可以创建CSomeClass类的动态对象。编译器调用无参数构造函数。

CSomeClass pSomeClass;

您可以创建CSomeClass类的非动态对象。编译器完全调用相同的无参数构造函数。

您可以使用operator new为动态变量分配内存:

int *number= new int(1);
相关问题