gpt4 book ai didi

C++,正确的复制运算符重载

转载 作者:行者123 更新时间:2023-11-30 01:56:31 25 4
gpt4 key购买 nike

我想将我的复制操作符重定向到我的复制构造函数。在后者中,我根据旧的可用类实现了复制/构建新类的正确逻辑。

然而,如何才是正确的做法呢?我“认为”这可能是内存泄漏,但我不知道如何在不传递指针的情况下做到这一点:

MyClass& MyClass::operator=(const MyClass& a) {
MyClass* b = new MyClass(a);
return *b;
}

这样可以吗?如果不是,正确的方法是什么?我应该更改方法主体还是原型(prototype)?

谢谢。

最佳答案

不,operator= 应该将当前对象属性设置为与分配的对象相同。您的方法在堆上分配一个新对象,将其作为引用返回(本质上是泄漏),并使调用运算符的对象完全不变。

您应该实现一个名为 CopyFrom() 的方法,该方法分配对象的所有属性以匹配传入对象的属性(深度复制任何堆分配的指针,其生命周期由MyClass),然后从您的复制构造函数和您的 operator= 中调用它。

    class MyClass
{
public:
MyClass( const MyClass& in )
{
CopyFrom( in );
}

MyClass& operator=( const MyClass& in )
{
CopyFrom( in );
return *this;
}

private:
void CopyFrom( const MyClass& in )
{
... copies in's attributes into self.
}
};

关于C++,正确的复制运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19713127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com