C ++入门5版:从uniqe_ptr初始化了shared_ptr?

Ita*_*iwa 3 c++ smart-pointers c++11

在C ++入门5版上。第12章动态内存:编写如下:

shared_ptr p(u); P承担所有权uniqe_ptr u; 使为u空。shared_ptr p(q,d)假定内置指针q指向的对象的所有权。q必须可转换为T*($ 4.11.2,第161页)。 p将使用可调用对象d($ 10.3.2,p.388)代替deletefree q

  • 我不明白“假设unque_ptr内置对象的和来自于...”。

有人可以向我解释这一段吗?非常感谢。

Obl*_*ica 5

这本书的类型不明确。你需要一个右值裁判构建一个shared_ptrunique_ptr

template< class Y, class Deleter >
shared_ptr( std::unique_ptr<Y,Deleter>&& r );
Run Code Online (Sandbox Code Playgroud)

检查此代码:

unique_ptr<int> up{new int{10}};
shared_ptr<int> sp(move(up));
cout << *sp <<'\n';
//cout << *up <<'\n'; // up is nullptr
Run Code Online (Sandbox Code Playgroud)

Live ob Godbolt


智能指针管理它们拥有的原始指针的生命周期。unique_ptr不共享所有权,而共享shared_ptr。当您shared_ptr从中构造A时,unique_ptr您必须通过移动放弃其所有权,并且unique_ptr无法复制。

我认为通过使用“假定所有权”,作者想指出,如果您以某种方式修改智能指针所拥有的指针,仍然会发生不好的事情。