关于对象生存期的问题:N3242草案
Question on object lifetime : N3242 Draft
c++ 11 n3242 "Duration of subbobjects, object lifetime", 3.8/1:
对象的生存期是对象的运行时属性。表示对象如果它是类或聚合类型,则具有非平凡初始化或者它的一个成员是由非平凡构造函数初始化的默认构造函数[注:由一个简单的复制/移动构造函数初始化是非平凡初始化。
类型T对象的生命周期从以下时刻开始:
- 存储器具有适合T类型的正确对齐和大小,并且
- 如果对象有非琐碎初始化,则表示初始化完成。
类型T的对象的生命周期结束于:
- 如果T是具有非平凡析构函数(12.4)的类类型,则开始析构函数调用,或者
- 对象占用的存储空间被重用或释放。
这里他们说的是带有对象生命周期的简单或非简单复制/移动构造函数。有人能用一些例子程序来解释这个吗?
一个点的变化描述了类型为T
的对象的生命周期何时开始,而没有提到T
的生命周期何时结束。为什么?
这里他们说的是带有对象生命周期的简单或非简单复制/移动构造函数。有人能用一些例子程序来解释这个吗?
这只是语义。在所有情况下,这都可以翻译为"对象的生命周期从构造函数完成运行时开始"。这段引用只是为了彻底起见,因为琐碎的构造实际上不涉及任何这样的执行。
要给出一个"例子"来说明这一点并不容易;我可以向你展示平凡的和不平凡的构造函数,但它不会真正告诉你任何东西,所以我不打算。
一个点的变化描述了T类型对象的生命周期何时开始,但他们没有提到T何时结束。为什么?
是的,他们做了。现在应该更清楚了,我重新格式化了你问题中的引用。
一般来说,当一个对象的构造函数运行到完成,并且直到析构函数开始时,该对象才处于活动状态。
异常是那些非常微不足道的类型,以至于没有为它们运行构造函数,例如在代码
之后int* p = (int*)malloc(1024);
你有一堆活着的int
,即使它们没有以任何方式初始化,也没有执行任何构造函数。但是,它们仍然在那里,你可以给它们赋值。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 关于对象生存期的问题:N3242草案