【发布时间】:2014-08-27 00:53:25
【问题描述】:
我对秒有误解。 3.6.3/1 N3797。当我考虑初始化规则时,我遇到了复制初始化的概念。
如果构造函数完成 或具有静态存储持续时间的对象的动态初始化是 在另一个之前排序,完成析构函数 第二个是在析构函数启动之前排序的 第一的。 [注意:这个定义允许并发销毁。——结束 注意]
第二个和第一个的完成析构函数是否可能在不同的线程中?
【问题讨论】:
标签: c++ destructor language-lawyer
我对秒有误解。 3.6.3/1 N3797。当我考虑初始化规则时,我遇到了复制初始化的概念。
如果构造函数完成 或具有静态存储持续时间的对象的动态初始化是 在另一个之前排序,完成析构函数 第二个是在析构函数启动之前排序的 第一的。 [注意:这个定义允许并发销毁。——结束 注意]
第二个和第一个的完成析构函数是否可能在不同的线程中?
【问题讨论】:
标签: c++ destructor language-lawyer
注意:我编辑并更正了关于未排序初始化的声明(感谢@dyp)。如果您的程序没有启动任何线程,那么所有初始化都以某种(可能是不确定的)顺序发生。
除了标准1中描述的限制之外,没有任何限制,线程执行初始化和销毁具有静态存储持续时间的对象。特别是,不同翻译单元中对象的初始化相对于彼此是不确定的顺序(参见 [basic.start.init]/2),如果程序启动线程,则 unsequenced。 p>
因此,如果 TU 中的第一个函数调用发生在主线程以外的另一个线程中,则初始化可能在多个线程中同时发生。标准的意思是那些初始化是顺序的对象(例如那些在同一个TU中的)也以一个确定的、兼容的顺序被销毁。
______________
1)“除了所说的,什么也不说”——有点重言式,但值得一提
【讨论】:
main 是无效的?