c++ 嵌套new操作构造对像的执行顺序
来源:互联网 发布:mac命令行移动文件夹 编辑:程序博客网 时间:2024/04/30 05:59
突然比较好奇如果在某中class对象在拷贝构造时的函数调用顺序,下面用代码说清楚我的问题:
定义class object,
class object { public: ... protected: ... private: ...}
上面定义一个object类,假设其操作都为默认操作。那么执行下面的嵌套new代码:
new object(*new object);
虽然只有一行代码,但还是值得研究的。我们知道在类对象构造时,如果是new operator操作,其执行过程可以参考文章:new/delete operator和operator new/delete ,它说明了new操作其实是执行了两个步骤,其一是调用operator new,即申请一定大小的内存;其二是调用类的构造函数,在步骤一分配好的内存上调用产生类对象。那么双层new操作,其执行的步骤到底是怎么样的呢?
其结果不外乎两种:
1.申请内存优先:
1)为括号里的对象调用operator new;
2)为括号外的对象调用operator new;
3)为括号里的对象调用constructor;
4)为括号外的对象调用constructor。
2.对象构造完整性优先:
1)为括号里的对象调用operator new;
2)为括号里的对象调用constructor;
3)为括号外的对象调用operator new;
4)为括号外的对象调用constructor。
在scott meyers看来,申请内存优先中是先调用operator new获得内存空间,将内存空间设定位值,即将构造对象存在于heap中。而经过步骤3之后会导致步骤2的设定位值效果被清除,最后步骤4构造的对象会认为它不处于heap之中,但实际上确实是处于heap中。这部分的具体解释见《more effective c++》的条款27,即P150。
虽然条款27极力解释清楚,但我还是有些不明白。你有更好的解释,可以知会我一下,不甚感谢!
- c++ 嵌套new操作构造对像的执行顺序
- new对象构造函数执行顺序
- 构造函数 ;构造函数的执行顺序。静态字段的初始化顺序。new关键字为我们做了什么。
- 关于类中new对象与构造函数执行顺序的问题
- Java new一个子类对象时static和构造函数的执行顺序
- 构造函数的执行顺序
- 构造函数的执行顺序
- 构造函数的执行顺序
- 构造函数的执行顺序
- 构造函数的执行顺序
- Java-类执行顺序(面向对像编程思想)
- new对象之后的动作---执行顺序
- java中new的执行顺序
- 类的构造函数的执行顺序
- 数据结构之对顺序栈的操作(C语言版)
- Java类的完整构造执行顺序
- Java类的完整构造执行顺序
- Java类的完整构造执行顺序
- select函数详解及应用
- 请各位帮忙看一下,第一个程序为什么不能输出和第二个程序一样的结果?这两个程序只有求最大公约束的代码不同
- 鸡蛋饭
- Linux(UNIX) 中一些简称的英文全称
- 设计模式思想适配器模式
- c++ 嵌套new操作构造对像的执行顺序
- 关于爱情
- ASP.NET 1.1 没有出现在 IIS 6.0 中的 Web 服务扩展列表中的解决方法
- C/C++/MFC中添加背景音乐 用的MCI 源码 和 方法说明 添加曲目路径即可用
- Servlet跳转
- Linux操作系统下的多线程编程解析
- JavaWeb 之 HttpServletResponse
- UVa 10048 - Audiophobia(Floyd, Kruskal)
- 饭工和碗工