在构造函数中给定引用,将类变量设置为引用

时间:2012-11-11 23:29:11

标签: c++

说我得到了一个类构造函数:

.h文件

class Memo {
    public:
    typedef vector<Memo> MemoList;
    Memo (int id, Memo::MemoList &list);
    MemoList pile;
};

.cc文件

Memo::Memo (int id, Memo::MemoList &list) {
    pile = list;
}

pile会是“同一件事”还是“等于”list,还是我需要一个新变量作为list的引用?我希望能够修改pile并使其影响原始list

2 个答案:

答案 0 :(得分:1)

简单回答您的问题:

  

我是否需要一个新变量作为列表的引用?一世   我希望能够修改桩并使其影响原件   列表。

您需要将列表存储为参考:

MemoList& pile;
//      ^

必须在构造函数的初始化列表中初始化引用:

Memo::Memo (int id, Memo::MemoList &list) : pile(list) {
}

当您的Memo必须是可复制的(现在不是)时,请使用指针而不是引用。

请记住(也许应该首先告诉我)以这种方式编程并不是非常安全 - 你必须确保你的列表生命周期比你的Memo对象更长!!!

答案 1 :(得分:0)

将其作为参考:

class Memo
{
public:
    typedef std::vector<Memo> MemoList;
    Memo(int id, MemoList & list) : pile(list) { }

private:
    MemoList & pile;
};

这将使您的课程无法分配,因为您无法重置参考。如果这是一个问题,请使用std::reference_wrapper<MemoList>而不是MemoList &(相同的语义)。