最近,我讀了an article關於C++中懶惰的數據結構(這個問題不是關於懶惰,或者特定的數據結構,但它只是動機)。爲什麼不復制一個包含單個shared_ptr的類
懶惰流(名單)實現如下:
template<class T>
class Stream
{
private:
std::shared_ptr <Susp<Cell<T>>> _lazyCell;
public:
Stream() {}
Stream(std::function<Cell<T>()> f)
: _lazyCell(std::make_shared<Susp<Cell<T>>>(f))
{}
Stream(Stream && stm)
: _lazyCell(std::move(stm._lazyCell))
{}
Stream & operator=(Stream && stm)
{
_lazyCell = std::move(stm._lazyCell);
return *this;
}
bool isEmpty() const
{
return !_lazyCell;
}
T get() const
{
return _lazyCell->get().val();
}
Stream<T> pop_front() const
{
return _lazyCell->get().pop_front();
}
};
筆者提到的移動構造函數:
我還添加了移動構造函數和效率的移動賦值運算符。
但是,由於明確存在,不能簡單地指定Stream
。這背後的動機是什麼?
據我所知,這個類只包含一個shared_ptr
,它可以被簡單地複製。在這樣的課堂裏禁止複製建築有什麼好處?
'shared_ptr'不是一般可複製的。 – Barry
不,這聽起來像一個修辭問題:無論如何,獨特的共享目的是什麼? –
@巴里:爲什麼不呢?我認爲這是shared_ptr的全部目的? – choeger