【发布时间】:2018-07-18 23:22:18
【问题描述】:
我有std::set 指向某种类型的对象的共享指针(这里的ints 只是举例)。我需要的是插入由原始指针构造的共享 ptr。但是当我试图擦除一些 set 元素时(同样我只有一个原始指针),我应该构造 shared_ptr 并将其传递给擦除方法(在我看来这是真的,因为 shared_ptr 的比较运算符比较它们内部的原始指针)。
代码sn-p,导致SIGABRT:
std::set<std::shared_ptr<int>> sett;
int *rp = new int(5);
sett.emplace( rp );
sett.erase( std::shared_ptr<int>( rp ) );
【问题讨论】:
-
你不能删除
&a。 -
你不能使用
shared_ptr来管理指向栈对象的指针。 -
@liliscent 堆栈分配这里是例如。实际上使用 new 分配的内存会导致相同的行为
-
@Uroboros 你不能使用 2
shared_ptr来管理 1 个原始指针。
标签: c++ c++11 pointers shared-ptr stdset