C++ - 哪一个应该使用"新车"或"新车()"?

q09*_*987 5 c++

可能重复:
类型名称后的括号是否与new有所不同?

大家好,

class Car
{
public:
    Car() : m_iPrice(0) {}
    Car(int iPrice) : m_iPrice(iPrice) {}

private:
    int m_iPrice;
};

int _tmain(int argc, _TCHAR* argv[])
{
    Car  car1;    // Line 1
    Car  car2();  // Line 2, this statement declares a function instead.

    Car* pCar = new Car; // Line 3
    Car* pCar2 = new Car(); // Line 4

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

当我们定义Car的对象时,我们应该使用第1行而不是第2行.当我们创建一个对象时,第3行和第4行都可以通过VC8.0的编译器.但是,3号线或4号线更好的方法是什么?或者,第3行等于第4行.

谢谢

zeu*_*xcg 7

在这种情况下,线条是等效的; 操作上没有区别.

但是,请小心 - 这并不意味着这些线条始终是等同的.如果您的数据类型是POD(即一个简单的结构:

struct Foo
{
    int a;
    float b;
};
Run Code Online (Sandbox Code Playgroud)

然后new Foo生成一个未初始化的对象,并new Foo()调用一个值初始化构造函数,该值初始化所有字段 - 即在这种情况下将它们设置为0.

因为在这种情况下很容易意外调用new Foo(),忘记初始化对象(这很好!),然后不小心让你的类非POD(在这种情况下,值初始化将不会完成,对象将再次未初始化) ,总是调用稍微好new Foo一些(尽管这会在某些MSVC版本中产生警告).