c – 为构造函数委派分配给* this

c – 为构造函数委派分配给* this,第1张

概述我正在查看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;

返回这个,这是正确的.

4284

显然这是一个非常简单的例子,但除了内存效率低下(两个A创建并且在被销毁之前被另一个覆盖),可能会出现什么问题?它当然看起来像代码味道,但我想不出一个非常好的理由.

解决方法 您没有使用整数初始化对象,而是修改默认的初始化对象.这可能是也可能不是问题.通常人们会在某些init()函数中将常见的东西视为具有与委托ctors类似的功能.但是,在某些情况下,这是不希望/错误/不可能的:

>当你有一个引用成员时,你必须在ctor中初始化它,你不能默认初始化它然后覆盖.使用指针代替可以提供帮助.
>对于某些成员,默认初始化会执行某些 *** 作,并且覆盖会执行其他 *** 作.性能方面,立即初始化成员会更有效率.根据初始化的作用,这可能只是性能损失,但对于对象的某些副作用,它甚至可能是平面错误.
>该成员可能无法转让.

此外,这被一些人认为是不好的风格.我个人认为它很糟糕,因为我觉得你应该总是初始化而不是稍后分配,即使对于简单的情况,因为有一天你忘记了一个重要的案例,然后失去的表现咬你.

但是YMMV.

总结

以上是内存溢出为你收集整理的c – 为构造函数委派分配给* this全部内容,希望文章能够帮你解决c – 为构造函数委派分配给* this所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1225844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存