相关疑难解决方法(0)

从shared_ptr中分离指针?

可能重复:
如何从boost :: shared_ptr释放指针?

我的接口函数返回一个指向对象的指针.用户应该拥有该对象的所有权.我不想返回Boost.shared_ptr,因为我不想强制客户端使用boost.但是,在内部,我想将指针存储在shared_ptr中,以防止在异常等情况下发生内存泄漏.似乎无法从共享指针中分离指针.这里有什么想法?

c++ boost shared-ptr

28
推荐指数
4
解决办法
3万
查看次数

共享指针释放

可能的重复:
如何从 boost::shared_ptr 释放指针?
从shared_ptr 中分离指针?

我正在尝试释放一个shared_ptr(您可以释放一个unique_ptr)。我知道当shared_ptr不唯一时这没有意义,但我有一个保证是唯一的shared_ptr。我试过了...

m_pObj.reset((T*)nullptr, [](T* const){});
Run Code Online (Sandbox Code Playgroud)

...但它只是删除了该对象。我不确定如果shared_ptr最终调用delete,删除器参数有什么用处。

有什么方法可以实现这一点(如果没有其他方法,欢迎使用VS2010特定的解决方案)。

c++ shared-ptr c++11

4
推荐指数
1
解决办法
3万
查看次数

删除std :: shared_ptr而不破坏托管对象?

我在以下场景中:

struct container {
    data* ptr;
};

void someFunc(container* receiver /* wants to be filled */) {
    auto myData = createData(); // returns shared_ptr<data>
    receiver->ptr = myData.get();
}
Run Code Online (Sandbox Code Playgroud)

生成该数据的函数和接收它的对象是两个不同库的一部分,我无法修改它的源代码.我必须使用这些数据类型,我无能为力.

所以我必须实现一个获取一些数据的函数,然后将指向该数据的指针传递给一个对象.我的问题是创建我的数据的函数,返回一个shared_ptr实例.需要数据的对象只接受指向它的原始指针.

如您所见,我调用get()shared_ptr来获取原始指针并将其传递给接收对象.如果我没有弄错,那么shared_ptr只要它超出范围,就会减少引用计数.所以在这种情况下,这意味着它会在函数返回时立即销毁我的数据,因为引用计数将达到0.

那么如何在shared_ptr不破坏托管对象的情况下摆脱实例呢?我传递数据的对象(为简单起见用"容器"结构说明)确实在其析构函数中处理内存清理,因此我不需要任何引用计数或类似的东西.我不想再监视分配的数据(除了接收指向它的指针的对象).我想摆脱它shared_ptr,并且只有一个指向已分配数据的原始指针,我可以将其传递给接收对象.

那可能吗?

c++ smart-pointers shared-ptr

3
推荐指数
1
解决办法
2165
查看次数

标签 统计

c++ ×3

shared-ptr ×3

boost ×1

c++11 ×1

smart-pointers ×1