C++使用new来初始化类的指针
这是我的第一篇博客!
1.ClassName * p = new ClassName;
调用默认构造函数。
如果类里没有写默认构造函数,会使用编译器帮我们生成的,但不会初始化成员变量,如
class NoConstructor //没写构造函数的类
{
public:
~NoConstructor() {}
void printVal()
{
cout << m_val << endl;
}
private:
int m_val;
};
NoConstructor* p1 = new NoConstructor;
p1->printVal();`
打印出来的值是 -842150451,也就是未初始化。
2.ClassName * p = new ClassName();
调用默认构造函数。
如果类里没有写默认构造函数,会使用编译器帮我们生成的,并且会初始化成员变量,比如 int 类会被初始化为 0
NoConstructor* p2 = new NoConstructor();
p2->printVal();`
此时打印出来值是 0
3.ClassName * p = new ClassName(arg);
调用自定义构造函数,或含参数的默认构造函数(如果这两种函数都定义了,它们的arg类型必须不同,这是函数重载的要求)。
4.补充
-
关于几个概念:默认构造函数是指无参的构造函数,或有参数(即形参)、并且为所有形参指定了实参的构造函数。
非默认构造函数称为自定义构造函数。 -
如果在一个类里,两种默认构造函数都写了,那么new ClassName和new ClassName()都不可用。因为编译器无法确定要使用哪一个构造函数。