Cpp 对象模型探索 / new 对象时加括号和不加括号时的差别

一、结论

CTest *pt1 = new CTest();
CTest* pt2 = new CTest;

1、若类 CTest 是空类,则二者 new 的结果没有区别。

2、若类存在显示声明的缺省的构造函数,则二者 new 的结果没有区别。

3、若类没有显示声明的缺省的构造函数,即使编译器为类创建了缺省的构造函数,二者的结果依然不一样。带括号的结果是会将 pt1 的 count_ 初始化为0,而不带括号的结果是不初始化 count_ 。

二、验证

1、对于空类,其对象只占1B,两种申请方式没有区别。

2、对于类存在显示声明的缺省的构造函数,两种 new 的时候都会调用该构造函数,所以对于 new 的结果没有影响。

#include class CTest 
{
public:CTest(){count_ = 0;}
public:size_t count_;
};int main()
{CTest *pt1 = new CTest();CTest* pt2 = new CTest;std::cout << "()::count_ = " << pt1->count_ << std::endl;std::cout << "count_ = " << pt2->count_ << std::endl;std::cin.get();return 0;
}

结果

#include class CTest 
{
public:size_t count_;
public:virtual void func(){}
};int main()
{CTest *pt1 = new CTest();CTest* pt2 = new CTest;std::cout << "()::count_ = " << pt1->count_ << std::endl;std::cout << "count_ = " << pt2->count_ << std::endl;std::cin.get();return 0;
}

结果

()::count_ = 0
count_ = 3452816845

 

(SAW:Game Over!)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部