我举了以下例子来说明我的问题:
class Abc
{
public:
int a;
int b;
int c;
};
class Def
{
public:
const Abc& abc_;
Def(const Abc& abc):abc_(abc) { }
Def& operator = (const Def& obj)
{
// this->abc_(obj.abc_);
// this->abc_ = obj.abc_;
}
};
这里我不知道如何定义复制赋值运算符。你有什么想法?谢谢。
答案 0 :(得分:6)
无法分配参考。你需要的东西可以。指针可以工作,但它们非常容易被滥用。
std::reference_wrapper
怎么样?
#include <functional>
class Abc
{
public:
int a;
int b;
int c;
};
class Def
{
public:
std::reference_wrapper<const Abc> abc_;
Def(const Abc& abc):abc_(abc) { }
// rule of zero now supplies copy/moves for us
// use the reference
Abc const& get_abc() const {
return abc_.get();
}
};
答案 1 :(得分:3)
无法分配参考。因此,人们只能通过放置新的和复制结构来定义它:
Def& operator = (const Def& obj)
{
this->~Def(); // destroy
new (this) Def(obj); // copy construct in place
}
但这确实是不必要的。只需使用指针。