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;
返回这个,这是正确的.
4284
显然这是一个非常简单的例子,但除了内存效率低下(两个A创建并且在被销毁之前被另一个覆盖),可能会出现什么问题?它当然看起来像代码味道,但我想不出一个非常好的理由.
解决方法 您没有使用整数初始化对象,而是修改默认的初始化对象.这可能是也可能不是问题.通常人们会在某些init()函数中将常见的东西视为具有与委托ctors类似的功能.但是,在某些情况下,这是不希望/错误/不可能的:>当你有一个引用成员时,你必须在ctor中初始化它,你不能默认初始化它然后覆盖.使用指针代替可以提供帮助.
>对于某些成员,默认初始化会执行某些 *** 作,并且覆盖会执行其他 *** 作.性能方面,立即初始化成员会更有效率.根据初始化的作用,这可能只是性能损失,但对于对象的某些副作用,它甚至可能是平面错误.
>该成员可能无法转让.
此外,这被一些人认为是不好的风格.我个人认为它很糟糕,因为我觉得你应该总是初始化而不是稍后分配,即使对于简单的情况,因为有一天你忘记了一个重要的案例,然后失去的表现咬你.
但是YMMV.
总结以上是内存溢出为你收集整理的c – 为构造函数委派分配给* this全部内容,希望文章能够帮你解决c – 为构造函数委派分配给* this所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)