参考对象变量的c ++拷贝赋值运算符

时间:2016-12-14 16:11:54

标签: c++

我举了以下例子来说明我的问题:

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_;
    }
};

这里我不知道如何定义复制赋值运算符。你有什么想法?谢谢。

2 个答案:

答案 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
}

但这确实是不必要的。只需使用指针。