如何允许具有复制构造函数的类从临时对象中复制构造,该复制构造函数采用非常量引用?
背景是这样的:
我有一个函数应该返回一个指向所有从 Base 继承的对象的指针列表,所以我需要类似vector<Base*>
. 鉴于这vector<auto_ptr>
不是一个很好的选择,我想编写一个简单的包装器vector<Base*>
来删除其析构函数中的所有元素。
我面临以下问题:
我的类有一个复制构造函数,如下所示:
auto_list(auto_list& rhs);
这样我就可以将指针列表复制到新实例并在旧实例中清除它。
但显然,这不适用于返回值,因为临时对象不绑定到非常量引用。看到函数可以返回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;
}
};