C:一个对象的生命周期和外部的功能
假设我想调用一个对象的外部函数来在body构造函数中执行一些检查.由于构造函数的正文完成执行后,对象的生命周期开始,是不安全的设计?
struct A; void check(A const&) { /* */ } struct A { A() { check(*this); } }; 我的意思是,我正在调用和外部功能与一个尚未活着的对象.这是不明确的行为吗? 相关问题:如果我把这个检查功能作为一个成员函数(静态或非静态的),那么这个标准对于在构造函数之外但是在类内部使用非活动对象呢? 在课堂观点与用户之间(一类课外与课外生活)有什么不同的终身概念? 解决方法
当调用check()时,A的生命周期将不会开始,因为from [base.life]:
A具有非空的初始化.它的初始化完成时,从[class.base.init] / 13:
然而,尽管一开始还没有开始,该标准还在[class.base.init] / 16:
关于一生的问题,没有区别: void check(const A& ) { .. } struct A { A() { check(*this); } }; 和: struct A { void check() const { .. } A() { check(); } }; 后者被明确允许(因为它不在一个ctor-initializer中),所以我没有理由以终身理由排除前者. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |