1

私が使用しますstd::map<int, A>

Aはクラスなのでシャローコピーを防がなければならないのですが、 みたいなクラスが多いAので、ディープコピーの構文や演算子を作るのは面倒です。コピーコンストラクタとコピー代入演算子は使わなくてもいいようなので使わないことにします。

ミスを防ぐために、private コピーコンストラクタとコピー代入演算子を持つ UnCopyable クラスを作成し、A継承しました。

ただし、問題が 1 つあります。std::mapコピー コンストラクターを使用します。

Aのポインターをマップに保存したくありません。

より良い解決策は何ですか?

4

2 に答える 2

3

この種の問題に対するいくつかの解決策がある C++11 を試すことを考えるかもしれません:std::map::emplaceの Copyable 要件を排除し、Aコピーstd::moveせずにあるオブジェクトを別のオブジェクトに転送できるようにします。

また、クラスをコピー不可として定義する新しい、より明示的な方法があります。

A( A const & ) = delete;

C++ コンパイラをアップグレードする良い機会です。

于 2012-06-29T14:48:59.020 に答える
1

のようなスマート ポインターを使用するstd::shared_ptrか、プロキシ クラスを作成できます。

例えば:

class Foo {
public:
    std::string name() const;
};

typedef std::shared_ptr<Foo> SharedFoo;

また

class SharedFoo {
public:
    std::string name() const { return instance->name(); }
private:
    std::shared_ptr<Foo> instance;
};
于 2012-06-29T14:40:26.247 に答える