我有一个shared_ptr
指向动态分配的char
s内存缓冲区。我打电话给shared_ptr
OwnerSharedPointer
。
现在,如果我宣布:
char * borrowerPtr;
并执行此操作:
borrowerPtr = OwnerSharedPointer.get();
并将borrowerPtr
传递给某个函数,该函数最终使用存储在已分配内存中的数据。这有什么不对吗?
答案 0 :(得分:2)
取决于。
如果borrowerPtr
仅在OwnerSharedPointer
的生命周期内使用,则可以。指针对象仍然活得很好。
如果OwnerSharedPointer
在您访问borrowerPtr
之前被销毁,并且没有其他std::shared_ptr
引用指针,那么您将被推入未定义行为的黑暗领域。不要这样做。
如果您在访问OwnerSharedPointer
之前不知道borrowerPtr
是否会被销毁,请改用std::weak_ptr
。这提供了对指针对象的检查访问,而不会增加所有者的数量。
答案 1 :(得分:2)
这有什么问题吗?
可能。我可以想到两种情况:
delete
。borrowerPtr
之前删除指针对象。