我有一个类存储对其父级的引用,引用在构造函数中传递.如果我尝试复制一个实例,我会收到一个错误"错误C2582:'operator ='function is unavailable",大概是指向不可分配的引用.
有没有解决方法,或者我只是将变量更改为指针而不是引用?
例如(过度简化,但我认为有关键点):
class MyClass
{
public:
MyClass(OtherClass &parent) : parent(parent) {}
private:
OtherClass &parent;
};
MyClass obj(*this);
.
.
.
obj = MyClass(*this);
Run Code Online (Sandbox Code Playgroud)
Tie*_*dye 14
有一种方法可以做到并且仍然使用引用,使用a reference_wrapper.所以
T& member;
Run Code Online (Sandbox Code Playgroud)
变
std::reference_wrapper<T> member;
Run Code Online (Sandbox Code Playgroud)
引用包装器基本上只是可重新分配的引用.
MSN*_*MSN 13
但如果你真的想要这样做:
#include <new>
MyClass::MyClass(const MyClass &rhs): parent(rhs.parent)
{
}
MyClass &MyClass::operator=(const MyClass &rhs)
{
if (this!=&rhs)
{
this->~MyClass();
new (this) MyClass(rhs);
}
return *this;
}
Run Code Online (Sandbox Code Playgroud)
是的只是使成员成为指针.引用将无法重新设置,并且没有解决方法.
编辑: @"Steve Jessop"使用PIMPL习语(使用"d指针"进行私有实现)如何解决问题.在赋值中,您将删除旧的实现,并从源对象的d指针创建一个新的复制构造.