44得票4回答
你能否使用类似于make_shared的方式分配一个数组?

buffer = new char[64]; buffer = std::make_shared<char>(char[64]); ??? 你能否使用make_shared<>()为数组分配内存? 我可以这样做:buffer = std::make_shared&lt...

43得票4回答
为什么在std::shared_ptr实现中需要两个指向被管理对象的原始指针?

这是cppreference关于std::shared_ptr的实现说明部分的一段引用,其中提到有两个不同的指针(如加粗所示):一个可以由get()返回,另一个则保存在控制块中。 在典型的实现中,std::shared_ptr只保存了两个指针: 1. 存储的指针(由get()返回的指针) ...

43得票2回答
从boost::shared_ptr转换为std::shared_ptr?

我有一个库,它内部使用了Boost版本的shared_ptr,并仅暴露这些。对于我的应用程序,我希望尽可能使用std::shared_ptr。不幸的是,这两种类型之间没有直接的转换方式,因为引用计数是与实现相关的。 是否有办法使boost::shared_ptr和std::shared_pt...

42得票2回答
使用 shared_ptr.reset 还是 operator= 更好?(涉及 IT 技术)

我试图理解C++11中的新成语。 至少在使用shared_ptr时,使用new T()和make_shared<T>()有实质性的区别。 但是如果要将共享指针重置为指向某个新实例,应该怎么做呢?以前,我通常会使用reset(new T())成员。然而,这难道不会遇到与一开始没有...

42得票6回答
如何使std::shared_ptr不调用delete()函数

我有一些函数需要使用std::shared_ptr作为参数,因此我被迫使用std::shared_ptr,但是我要传递给函数的对象并非动态分配。我该如何将对象包装在std::shared_ptr中,并使std::shared_ptr不调用其上的delete操作。

41得票1回答
使用std::move和std::shared_ptr

我有一个如下定义的函数:void foo(std::shared_ptr<X> x) { ... }; 如果我声明一个指向X的shared ptr:std::shared_ptr<X> sourcePtr(new X(...)); 我可以按照以下方式调用foo:foo(...

41得票14回答
如何释放 boost::shared_ptr 中的指针?

boost::shared_ptr能否释放存储的指针而不删除它? 我在文档中没有看到release函数的存在,FAQ中也解释了为什么它不提供release函数,类似于不能对不唯一的指针执行release操作。我的指针是唯一的。如何释放我的指针? 或者使用哪个boost智能指针类可以允许我释放指...

41得票4回答
std::tr1::shared_ptr是如何实现的?

我一直在考虑使用共享指针,我知道如何自己实现它--但不想这样做,所以我尝试使用std::tr1::shared_ptr,并且有几个问题... 参考计数是如何实现的?它使用双向链表吗?(顺便说一下,我已经搜索过了,但我找不到可靠的信息。) 使用std::tr1::shared_ptr时有什么...

40得票3回答
为什么shared_ptr的删除器必须是可复制构造的?

在C++11中,std::shared_ptr有四个构造函数可以传递类型为D的删除器对象d。这些构造函数的签名如下: template<class Y, class D> shared_ptr(Y * p, D d); template<class Y, class D, ...

39得票1回答
C++11中的intrusive_ptr

C++11是否有与boost::intrusive_ptr相当的东西? 我的问题是,我在我的C++代码上有一个C-style接口。 接口的两侧都可以使用C ++,但出于兼容性原因,必须公开C接口。 我不能使用std :: shared_ptr ,因为我必须通过两个(或更多)智能指针来管理对象...