【发布时间】:2019-01-25 19:49:26
【问题描述】:
根据本文第一个答案:Explicitly deleting a shared_ptr
是否可以像下面的代码一样强制删除 std::shared_ptr 及其管理的对象?
do {
ptr.reset();
} while (!ptr.unique());
ptr.reset(); // To eliminate the last reference
从技术上讲,如果指针的引用计数超过 1,则应该尝试调用 std::shared_ptr::reset,除非它达到 1。对此有什么想法吗?
【问题讨论】:
-
std::weak_ptr ?
-
这绝对是XY problem。 究竟你想做什么,你认为你需要这样做?
-
shared_ptr中的“共享”是指“共享所有权”而不是“共享资源”。您的所有权并未真正共享,但只有一个所有者,其他所有者仅持有指针(又名weak_ptr)。 -
@RezaHajianpour:那么你的代码是不连贯的。你说这个“引擎”应该单独负责销毁对象,但是这个
get_model函数明确与其他人分担该责任。你不能同时拥有它。修复你代码中的矛盾,应该没问题。 -
@RezaHajianpour 为什么不在引擎内部使用
std::unique_ptr来维护Model对象的独占所有权,然后让get_model()返回一个不转移/共享所有权的原始Model*指针?
标签: c++ c++11 pointers c++17 smart-pointers