shared_ptr怎么构造
时间: 2023-10-21 10:25:33 浏览: 132
shared_ptr可以通过多个构造函数进行构造。其中一个常用的构造函数是使用指针来构造shared_ptr对象。该构造函数的模板定义如下:
template<class _Ux, enable_if_t<conjunction_v<conditional_t<is_array_v<_Ty>, _Can_array_delete<_Ux>, _Can_scalar_delete<_Ux>>, _SP_convertible<_Ux, _Ty>>>, int = 0>
explicit shared_ptr(_Ux * _Px) {
// construct shared_ptr object that owns _Px
_Setp(_Px, is_array<_Ty>{});
}
这个构造函数接受一个指针作为参数,用于构造一个shared_ptr对象。在构造过程中,shared_ptr会获取对该指针所指向的资源的所有权。需要注意的是,如果资源是数组类型,构造函数会根据is_array<_Ty>来选择适当的构造方式。
然而,需要留意的是,如果一个类的析构函数为private,那么构造shared_ptr对象时会出现错误。在这种情况下,编译器无法进行析构函数的调用,从而导致编译错误。所以在构造shared_ptr对象时,要确保所使用的类的析构函数是public的。
总结来说,shared_ptr可以通过使用指针来构造,使用该构造函数可以获取对指针所指向资源的所有权。但需要注意,如果类的析构函数为private,构造shared_ptr对象时会出现错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [学习C++标准库std::shared_ptr构造函数之一](https://blog.csdn.net/qq_41824928/article/details/107227424)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文