说我得到了一个类构造函数:
class Memo {
public:
typedef vector<Memo> MemoList;
Memo (int id, Memo::MemoList &list);
MemoList pile;
};
Memo::Memo (int id, Memo::MemoList &list) {
pile = list;
}
pile
会是“同一件事”还是“等于”list
,还是我需要一个新变量作为list
的引用?我希望能够修改pile
并使其影响原始list
。
答案 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 &
(相同的语义)。