可能重复:
类型名称后面的括号与new有区别吗?
以下初始化之间有什么区别?在本教程中,这与情况#1相同,但如果我使用下面的#2方法,会有什么不同吗?
struct X
{
X() {}
int x;
};
int main()
{
std::auto_ptr<X> p1(new X); // #1
std::auto_ptr<X> p2(new X()); // #2
}
智能指针在这里没有任何区别。两个智能指针都以相同的方式初始化,使用指向X
的指针。不同之处在于X
是如何初始化的。如果存在差异以及差异是什么取决于如何定义X
。这个答案很好地描述了不同情况下会发生什么。在这种情况下,由于X
有一个默认构造函数,所以它们的初始化方式相同。然而,如果没有默认的构造函数,它们将以不同的方式初始化。