我对使用C ++创建对象的方式有疑问。如果我定义了一个类,比如CSomeClass
,我可以使用以下行创建CSomeClass
的新对象:
CSomeClass* pSomeClass = new CSomeClass;
在这种情况下,我还可以通过覆盖 new 运算符来控制新对象的创建方式。我的问题是,当我使用以下代码行时
CSomeClass pSomeClass;
在这种情况下,使用什么运算符来创建对象。我希望能够以与新运算符相同的方式覆盖该特定运算符,但我不确定它是哪个。如果这个问题没有意义,请告诉我,我会澄清。感谢。
答案 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);