C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 为构造函数委派分配给* this大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在查看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.

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。