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

これにより、参照を再設定できないため、クラスを割り当てできなくなります。それが問題になる場合は、 (同じセマンティクス)のstd::reference_wrapper<MemoList>代わりに使用してください。MemoList &

于 2012-11-11T23:36:16.347 に答える