可能重复:
类型名称后的括号是否与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行.
谢谢
在这种情况下,线条是等效的; 操作上没有区别.
但是,请小心 - 这并不意味着这些线条始终是等同的.如果您的数据类型是POD(即一个简单的结构:
struct Foo
{
int a;
float b;
};
Run Code Online (Sandbox Code Playgroud)
然后new Foo生成一个未初始化的对象,并new Foo()调用一个值初始化构造函数,该值初始化所有字段 - 即在这种情况下将它们设置为0.
因为在这种情况下很容易意外调用new Foo(),忘记初始化对象(这很好!),然后不小心让你的类非POD(在这种情况下,值初始化将不会完成,对象将再次未初始化) ,总是调用稍微好new Foo一些(尽管这会在某些MSVC版本中产生警告).
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |