shared_ptr的拷贝构造函数

假设shared_ptr的模板参数为T,它的一个构造函数为:
template< class Y >
explicit shared_ptr( Y* ptr );

其中T可以等于Y,也可以不等于Y。

那么对于它的拷贝构造函数:

shared_ptr( const shared_ptr& r ) noexcept;
和
template< class Y >
shared_ptr( const shared_ptr<Y>& r ) noexcept;

当T等于Y时就是

shared_ptr( const shared_ptr& r ) noexcept;

当T不等于Y时就是

template< class Y >
shared_ptr( const shared_ptr<Y>& r ) noexcept;

那么我的疑问是,既然用指针构造时T可以等于Y,也可以不等于Y,那么

template< class Y >
shared_ptr( const shared_ptr<Y>& r ) noexcept;
也应该包含了这两种情况,为何会多此一举定义一个
shared_ptr( const shared_ptr& r ) noexcept;

呢?

原来模板拷贝构造函数不属于构造函数,就算我们只定义了

template< class Y >
shared_ptr( const shared_ptr<Y>& r ) noexcept;

编译器也会默认合成一个

shared_ptr( const shared_ptr& r ) noexcept;
所以不管定没定义模板拷贝构造函数,
shared_ptr( const shared_ptr& r ) noexcept;
总是存在的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
shared_ptr的拷贝构造和移动构造分别用于创建一个新的shared_ptr对象,并与原始shared_ptr对象共享同一个资源。拷贝构造函数会增加资源的引用计数,而移动构造函数则会将原始shared_ptr对象的资源转移到新的shared_ptr对象上。 在C++11中,shared_ptr拷贝构造函数和拷贝赋值运算符都是使用引用计数的方式来实现资源的共享。当一个shared_ptr对象通过拷贝构造或赋值给另一个shared_ptr对象时,引用计数会递增,表示有多个shared_ptr对象共享同一个资源。只有当所有与资源关联的shared_ptr对象都被销毁时,资源才会被释放。 而移动构造函数则是在C++11中引入的,它允许将资源的所有权从一个shared_ptr对象转移给另一个shared_ptr对象,而不需要增加引用计数。移动构造函数通过将原始shared_ptr对象的引用计数置零,并将资源指针转移给新的shared_ptr对象,实现了资源的转移。 引用提到了shared_ptr的拷贝构造和拷贝赋值的相关内容。引用提到了weak_ptr作为shared_ptr的辅助工具。引用提到了unique_ptr的移动构造函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【C++11智能指针】shared_ptr的初始化、拷贝构造和拷贝赋值、移动构造和移动赋值](https://blog.csdn.net/qq_42815188/article/details/99410218)[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: 50%"] - *3* [C++11unique-ptr智能指针详解.pdf](https://download.csdn.net/download/qq_43934844/87504581)[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: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值