非 const 参照を取るコピー コンストラクターを持つクラスを一時オブジェクトからコピー構築できるようにするにはどうすればよいですか?
背景はこうです。
Base からすべて継承するオブジェクトへのポインターのリストを返す関数があるため、vector<Base*>
. それはあまり選択肢ではないので、デストラクタ内のすべての要素を削除vector<auto_ptr>
する単純なラッパーを書きたいと思いました。vector<Base*>
私は次の問題に直面しています:
私のクラスには、次のようなコピー コンストラクターがあります。
auto_list(auto_list& rhs);
ポインタ リストを新しいインスタンスにコピーし、古いインスタンスでクリアできるようにします。
しかし、明らかに、一時変数は非定数参照にバインドされないため、戻り値では機能しません。関数から auto_ptr を返すことができるのを見て、どのように実装したのでしょうか?
注: 私は C++11 やブーストを使用できないため、ムーブ セマンティクスや unique_ptr はオプションではありません。
それが役立つ場合、これはこれまでの私のコードです:
template <typename T> class auto_list
{
private:
vector<T*> pointers;
public:
auto_list(vector<T*>& pointers)
{
this->pointers = pointers;
}
auto_list(auto_list& rhs)
{
this->pointers = rhs.pointers;
rhs.pointers.clear();
}
~auto_list()
{
for(typename vector<T*>::const_iterator it = this->pointers.begin(); it != this->pointers.end(); it++)
{
delete (*it);
}
}
auto_list& operator=(auto_list& rhs)
{
this->pointers = rhs.pointers;
rhs.pointers.clear();
}
vector<T*> get_pointers() const
{
return this->pointers;
}
};