我有一个shared_ptr
指向动态分配的char
内存缓冲区。让我称之为shared_ptr
OwnerSharedPointer
.
现在,如果我声明:
char * borrowerPtr;
并这样做:
borrowerPtr = OwnerSharedPointer.get();
并将borrowerPtr
传递给某个函数,该函数最终使用存储在分配内存中的数据。这有什么问题吗?
这有什么问题吗?
可能。我可以想到两种情况:
- 该函数在指针上调用
delete
。 - 共享指针的引用计数变为 0,并且在使用
borrowerPtr
之前删除了指针。
这取决于。
如果borrowerPtr
仅在OwnerSharedPointer
的生命周期内使用,这很好。尖头仍然会活得很好。
如果在你访问borrowerPtr
之前OwnerSharedPointer
被摧毁,并且没有其他std::shared_ptr
对脚尖的引用,你就会被推入不确定行为的黑暗领域。别这样。
如果您不知道OwnerSharedPointer
是否会在访问borrowerPtr
之前被销毁,请改用std::weak_ptr
。这提供了对点的检查访问权限,而不会增加所有者计数。