c++ - boost::shared_ptr 标准容器

标签 c++ smart-pointers std stdmap

假设我有一个 foo 类,并希望使用 std::map 来存储一些 boost::shared_ptrs,例如:

class foo;

typedef boost::shared_ptr<foo> foo_sp;
typeded std::map<int, foo_sp> foo_sp_map;

foo_sp_map m;

如果我向 map 添加一个新的 foo_sp 但使用的键已经存在,现有的条目是否会被删除?例如:

foo_sp_map m;

void func1()
{
    foo_sp p(new foo);
    m[0] = p;
}

void func2()
{
    foo_sp p2(new foo);
    m[0] = p2;
}

原来的指针(p)被p2替换后会不会被释放?我很确定会这样,但我认为值得询问/分享。

最佳答案

首先,您的问题标题说的是 boost::auto_ptr,但您实际上是指 boost::shared_ptr

是的,原始指针将被释放(如果没有对它的进一步共享引用)。

关于c++ - boost::shared_ptr 标准容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/140033/

相关文章:

c++ - OpenCV 错误 : Assertion failed -- matrix subtract

c++ - 使用 C++11 线程对非常量引用进行无效初始化?

c++ - 在大型 C++ 代码库中避免空指针异常

c++ - 我什么时候使用哪种指针?

c++ - 智能指针和构造函数异常

c++ - unique_ptr 和前向声明 : the proper way to code a factory function

c++ - g++ 错误 : call of overloaded 'abs(unsigned int)' is ambiguous

javascript - 如何只匹配那些前面有偶数个 `%` 的数字?

c++ - boost::unordered_map.emplace(Args&&... args) 如何工作?

c++ - 如何将哈希值传递到无序映射以减少持有锁的时间?