std::shared_ptr<T>
和 和有什么不一样std::shared_ptr<T const>
?
你什么时候会使用其中一个?
shared_ptr<int>
是一个shared_ptr
非常量int
。您可以修改 int 和shared_ptr
shared_ptr<const int>
是一个shared_ptr
对一个const int
。您不能const int
将shared_ptr
点修改为,因为它是const
. 但是您可以修改shared_ptr
自身(分配给它,调用其他非常量方法等)
const shared_ptr<int>
是一个const shared_ptr
非常量int
。您不能修改shared_ptr
(通过调用reset
或任何非常量方法),但您可以修改int
它指向
const shared_ptr<const int>
是一个const shared_ptr
对一个const int
。你不能修改千斤顶。
shared_ptr<T>
在引擎盖下存储一个 T*,而
shared_ptr<T const>
在引擎盖下存储一个 T const*。因此,它与指向某些数据的指针和指向某些常量数据的指针之间的区别相同。
当您只想让它表现得像一个常规指针(带有引用计数)时,您会使用 shared_ptr 并且当您想要存储指向某些常量数据的 ref-counted 指针(您从不打算修改的数据)时,您会想要使用 shared_ptr .) 回想一下,指向常量数据的指针(不能修改指向的数据,但可以修改指针)和常量指针(可以修改指向的数据,但不能修改指针本身)之间存在区别。 ) 最后还有一个指向常量数据的常量指针,您既不能修改指向的数据,也不能修改指针本身。