fooコンストラクトをコピーしたい std::auto_ptr メンバーを含むクラスがありますが、これは許可されていないようです。課題についても同様のことがあります。次の例を参照してください。
struct foo
{
private:
int _a;
std::string _b;
std::auto_ptr< bar > _c;
public:
foo(const foo& rhs)
: _a(rhs._a)
, _b(rhs._b)
, _c(rhs._c)
// error: Cannot mutate rhs._c to give up ownership - D'Oh!
{
}
foo& operator=(const foo& rhs)
{
_a = rhs._a;
_b = rhs._b;
_c = rhs._c;
// error: Same problem again.
}
};
_casと宣言することもできますmutableが、これが正しいかどうかはわかりません。誰かがより良い解決策を持っていますか?
編集
OK、期待していたような回答が得られないので、問題についてもう少し具体的に説明します。
- タイプのオブジェクトが
fooスタック上に作成され、値によってコンテナー クラス (stl ではない) に渡された後、スコープ外になります。コンテナー コードを制御することはできません。(実際には、バグのあるアクティブ キューの実装です。) - この
barクラスは、かなり重量のあるパーサーです。パフォーマンスが非常に低いnewためdelete、コピー構築可能であったとしても、コストがかかりすぎます。 barオブジェクトが作成されると、一度に 1 か所だけ所有する必要があることを保証できます。この場合、スレッド間で渡され、トランザクションが完了すると削除されます。これが、私が a を使用することを望んでいた理由ですstd::autp_ptr。- ブースト スマート ポインターを検討したいと思っていますが、代替手段があれば、この一意性を保証したいと考えていました。