std::shared_ptr<T>
和std::shared_ptr<T const>
之间的区别是什么?
你何时会使用一个与另一个?
答案 0 :(得分:10)
shared_ptr<int>
是非shared_ptr
的{{1}}。您可以修改int和int
shared_ptr
是shared_ptr<const int>
到shared_ptr
。您无法修改const int
const int
个点,因为它是shared_ptr
。但您可以修改const
本身(分配给它,调用其他非const方法等)
shared_ptr
是非const shared_ptr<int>
的{{1}}。您无法修改const shared_ptr
(通过调用int
或任何非const方法),但您可以修改shared_ptr
指向
reset
是int
到const shared_ptr<const int>
。你无法修改插孔。
答案 1 :(得分:-2)
shared_ptr<T>
在引擎盖下存储T *,而
shared_ptr<T const>
在引擎盖下存储T const *。所以它与指向某些数据的指针和指向某些常量数据的指针之间的差异相同。
当你只是希望它表现得像常规指针(带引用计数)时,你会使用shared_ptr,当你想要存储一个引用指针的常量数据时,你会想要使用shared_ptr(你永远不会有数据) indend to modify。)回想一下,指向常量数据的指针(你不能修改指向的数据,但你可以修改指针)和常量指针(你可以修改指向的数据,但不是指针本身。)最后有一个指向常量数据的常量指针,你既不能修改指向的数据,也不能修改指针本身。