c – 为构造函数委派分配给* this
发布时间:2020-12-16 06:58:49 所属栏目:百科 来源:网络整理
导读:我正在查看C 11中的一些新功能,由于我当前的GCC版本,我无法使用构造函数委派.但它让我想到复制这样的功能: class A{public: A() : num( 42 ) {} A( int input ) { *this = A(); num *= input; } int num;}; 它肯定编译和工作正常,代码如下: A a;cout "a: "
我正在查看C 11中的一些新功能,由于我当前的GCC版本,我无法使用构造函数委派.但它让我想到复制这样的功能:
class A { public: A() : num( 42 ) {} A( int input ) { *this = A(); num *= input; } int num; }; 它肯定编译和工作正常,代码如下: A a; cout << "a: " << a.num << endl; A b( 2 ); cout << "a: " << b.num << endl; 返回这个,这是正确的. 42 84 显然这是一个非常简单的例子,但除了内存效率低下(两个A创建并且在被销毁之前被另一个覆盖),可能会出现什么问题?它当然看起来像代码味道,但我想不出一个非常好的理由. 解决方法
您没有使用整数初始化对象,而是修改默认的初始化对象.这可能是也可能不是问题.通常人们会在某些init()函数中将常见的东西视为具有与委托ctors类似的功能.但是,在某些情况下,这是不希望/错误/不可能的:
>当你有一个引用成员时,你必须在ctor中初始化它,你不能默认初始化它然后覆盖.使用指针代替可以提供帮助. 此外,这被一些人认为是不好的风格.我个人认为它很糟糕,因为我觉得你应该总是初始化而不是稍后分配,即使对于简单的情况,因为有一天你忘记了一个重要的案例,然后失去的表现咬你. 但是YMMV. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |