C++默认构造函数不初始化指向nullptr的指针?

Nar*_*rek 7 c++

我想知道A*我的课程中是否有成员,nullptr如果我有这种形式的班级构造函数,我们不应该自动设置:

class MyCLass
{
    A* m_pointer;

public:
    MyCLass()
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

如果我在C++ 11中做MyCLass* o = new MyCLass;或不做 MyCLass* o = new MyCLass();,这有关系吗?

Hos*_*ork 15

指针是"POD类型"......又名"普通旧数据".这里总结了默认初始化时间和位置的规则:

C++中POD类型的默认初始化

所以不行.对于类的构造函数是什么并不重要,如果它是一个原始指针作为类的成员.你实际上并没有实例化这个类.所以喜欢Foo *std::vector<Foo> *以*结尾的成员不会被初始化为nullptr.

智能指针类不是POD.因此,如果您使用unique_ptr<Foo>shared_ptr<Foo>创建类的实例,那么如果您没有初始化它们,那么它确实有一个构造函数使它们实际为null.

如果我做MyCLass*o = new MyCLass,这是否重要; 或者我做MyCLass*o = new MyCLass(); 在C++ 11中?

请问每个问题一个问题.

类型名称后的括号是否与new有区别?