1

假设我有一个类构造函数:

.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.

4

2 回答 2

1

简单回答您的问题:

我需要有一个新变量作为列表的引用吗?我希望能够修改堆并让它影响原始列表。

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

MemoList& pile;
//      ^

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

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

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

请记住(也许一开始就应该告诉它)以这种方式编程不是很安全——你必须确保你的列表生命周期比你的备忘录对象长!!!

于 2012-11-11T23:30:52.673 回答
0

使其成为参考:

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

private:
    MemoList & pile;
};

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

于 2012-11-11T23:36:16.347 回答