一、结论

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

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

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

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

二、验证

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

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

#include <iostream>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;
}

结果

()::count_ = 0
count_ = 0

3、对于没有显式声明构造函数的类,即使编译器自动生成了一个构造函数,二者 new 的结果也是不同的。带括号的 new 会对类中成员变量进行初始化,而不带括号的 new 则不采取任何操作。

#include <iostream>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!)

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

  1. Cpp 对象模型探索 / 系列文章的索引

    一.对象 普通类对象占用的空间. 子类的内存布局. 编译器为对象创建缺省构造函数的条件. 二.虚函数(完) 对象的虚函数表指针的位置. 继承关系下的虚函数手动调用. 虚函数表和虚函数表指针的创建时机. ...

  2. Js函数加括号、不加括号

    Js函数加括号.不加括号 (function a(){}) (命名函数表达式)会返回这个函数(不会执行),但是在括号外面无法调用该函数,需要一个变量接收这个函数,var fun = (function ...

  3. Js事件绑定时,函数名加括号和不加括号有什么区别

    Js事件绑定时,函数名加括号和不加括号有什么区别以window.onload为列 大致可以理解为一:不加括号时:=指向函数,触发事件时触发函数.window.οnlοad=aa;aa为一个函数等价于w ...

  4. js中方法调用加括号和不加括号的区别

    前言 一个页面需要使用到setInterval和setTimeout.使用过程中对于方法的调用出现了加括号和不加括号的区别,当然在其他的场景也有发生,window.load = init等等 区别 以 ...

  5. v-on:click(简写@click)绑定事件加括号和不加括号

    如果事件绑定的方法没有参数可以选择加括号也可以不加括号

  6. js构造函数加括号与不加括号的区别

    //首先定义一个构造函数Hello function Hello(){ alert(1): } //定义一个函数表达式 var getName = function(){ alert(2): } // ...

  7. Cpp 对象模型探索 / 静态局部对象只构造一次的原因和执行析构的方法

    代码 class A { public:A() {}~A() {} };void func() {static A a; }int main() {func();return 0; } 问题 1.函数 ...

  8. Cpp 对象模型探索 / 多重继承下基类指针释放子类对象的原理说明(虚析构函数的作用)

    源码 #include <iostream>class Base1 { public:virtual void func_1_1(){ std::cout << "B ...

  9. Cpp 对象模型探索 / 编译器为对象创建缺省析构函数的条件

    1.基类中含有析构函数的子类,编译器为子类创建析构函数. 2.类成员变量是类对象,该类对象含有析构函数,则编译器为子类创建析构函数. 代码 class Parent { public:~Parent( ...

最新文章

  1. Power Network [POJ - 1459]
  2. Google瓦片地图算法解析
  3. mysql wampmysqld_wamp中mysqld占用内存大mysql5.6 | 学步园
  4. 基于jsp的网上商城_[源码和文档分享]基于S2SH框架的JSP和MySQL的网上商城系统
  5. windows与虚拟机的linux共享一个文件夹
  6. 阿里云服务器mysql默认密码_阿里云服务器修改MySQL初始密码---Linux学习笔记
  7. 斐波那契查找(Fibonacci Search)和折半查找
  8. Checking if your code is running on 64-bit PHP
  9. CentOS 6.5 x64 Redis 安装
  10. Java知识积累——参数个数可变的函数(Varargs)
  11. SQL Server 2008 卸载报错
  12. 扫描仪怎样装无线网络服务器,怎么设置打印机IP地址和安装扫描仪。
  13. 企业计算机网络安全威胁及措施
  14. target triplets
  15. python n个list如何组成矩阵_使用Python并行框架Dask处理和分析大规模时空数据
  16. Markdown整理备忘(一)-- 符号整理
  17. Linux--Ubuntu Tweak
  18. 周鸿祎谈5G时代网络安全:手机病毒可能会更猖狂
  19. 奶爸日记 - 祝你生日快乐
  20. 黑、黄教堂等试音碟及其他

热门文章

  1. 2016/08/24 CppCon 2015 Bjarne Stroustrup “Writing Good C++14
  2. 转载收藏之用 - 微信公众平台开发教程(三):微信公众平台开发验证
  3. java的finally_java的finally用法
  4. 【收藏】在QGIS中导入GOOGLE、BING等地图和卫星影像(插件方式和XYZ方式)
  5. Spark宽依赖:根据宽依赖切分stage
  6. HDFS修改副本数并生效
  7. JVM调优:图解对象内存分配过程
  8. Spring Boot 2.x整合Apollo代码示例
  9. Java集合常见数据结构-栈/队列/数组/链表/红黑树
  10. 【示例】Lucene查询索引库编程步骤