const shared_ptr<int>和shared_ptr<const int>的区别

const shared_ptr 和 shared_ptr 在 C++ 中表示两种不同的概念,尽管它们都与智能指针和常量性有关。下面是它们之间的主要区别:

const shared_ptr

当你声明一个 const shared_ptr,你实际上是在声明一个指向 int 的智能指针,而这个智能指针本身是不可变的。这意味着你不能改变这个智能指针所指向的对象(即你不能使其指向另一个对象),但你可以修改它所指向的 int 对象的值(除非该对象本身是常量)。

const std::shared_ptr<int> ptr = std::make_shared<int>(42);  
  
// 正确:修改 ptr 所指向的 int 的值  
*ptr = 100;  
  
// 错误:不能改变 ptr 所指向的对象  
// ptr = std::make_shared<int>(50); // 编译错误

shared_ptr

当你声明一个 shared_ptr,你声明了一个智能指针,它指向一个 const int 对象。这意味着你不能通过这个智能指针来修改它所指向的 int 对象的值,但你可以改变这个智能指针所指向的对象(即你可以使其指向另一个 const int)。

std::shared_ptr<const int> ptr = std::make_shared<const int>(42);  
  
// 错误:不能修改 ptr 所指向的 const int 的值  
// *ptr = 100; // 编译错误  
  
// 正确:可以改变 ptr 所指向的对象(虽然这在实践中可能并不常见)  
ptr = std::make_shared<const int>(50);

总结:

const shared_ptr:智能指针本身不可变,但可以修改所指向的 int 对象的值。

shared_ptr:智能指针可以变(可以指向其他对象),但所指向的 int 对象本身不可变。

在实际编程中,选择使用哪种类型取决于你的需求:如果你希望智能指针本身不可变,使用 const shared_ptr;如果你希望智能指针所指向的对象不可变,使用 shared_ptr。通常,保护数据不被修改是一个好的编程实践,因此 shared_ptr 在许多情况下可能更有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值