如何允許帶有複製構造函數的類使用非const引用從臨時對象複製構建?如何允許臨時性的非const複製構造函數
的背景是這樣的:
我應該返回指針的列表,所有從基地繼承的對象的功能,所以我需要像vector<Base*>
。 鑑於vector<auto_ptr>
不是一個很好的選擇,我想寫一個簡單的包裝vector<Base*>
,刪除其析構函數中的所有元素。
我面臨着以下問題:
我的類有一個拷貝構造函數如下:
auto_list(auto_list& rhs);
,這樣我可以將指針列表複製到新的實例,並在舊的清除一。
但顯然,這不會與返回值一起工作,因爲臨時對象不會綁定到非const引用。 看到auto_ptr可以從函數返回,它們是如何實現的?
注意:我不能使用C++ 11或boost,因此移動語義或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;
}
};
這似乎是一個非常簡單的解決實際。有什麼可能會炸燬嗎?看到Mike Seymour的回答,我想知道爲什麼auto_ptr會使這樣的事情複雜化,而不是使用mutable。 – pezcode 2012-01-12 19:38:12
然後,你將不再能夠聲明它爲'const'來防止失效,這會比'auto_ptr'更容易混淆和容易出錯。它可以通過將它傳遞給* any *函數來無效,即使該函數接受一個'const'引用。 – 2012-01-12 19:50:14