57得票4回答
make_shared是否真的比new更高效?

我正在尝试使用C++11的shared_ptr和make_shared,并编写了一个小的玩具示例来查看调用make_shared时实际发生了什么。作为基础设施,我正在使用带有XCode4的llvm/clang 3.0以及llvm标准C++库。class Object { public: ...

53得票5回答
如何将deleter传递给make_shared函数?

自从C++11以来,由于多种原因,开发者倾向于使用智能指针类来管理动态分配的对象的生命周期。随着这些新的智能指针类的出现,标准甚至建议不要使用像new这样的运算符,而是建议使用make_shared或make_unique来避免一些容易出错的问题。如果我们想使用一个智能指针类,比如shared...

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

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

28得票2回答
C++17中std::make_shared()的更改

在cppref中,直至C++17,以下内容成立: 像f(std::shared_ptr<int>(new int(42)), g())的代码可能会导致内存泄漏,如果g在new int(42)之后被调用并且抛出异常,而f(std::make_shared<int>...

27得票3回答
使用make_shared时会发生什么?

我想知道这两行代码是否相同:shared_ptr<int> sp(new int(1)); // double allocation? shared_ptr<int> sp(make_shared<int>(1)); // just one allocati...

24得票2回答
弱指针、make_shared和内存释放

当存在至少一个weak_ptr时,shared_ptr的控制块将保持活动状态。如果使用make_shared创建共享指针,则意味着整个对象的内存都被保留。(对象本身会被正确析构,但由于控制块和对象的内存是一起分配的,就像make_shared一样,它们只能一起释放。) 我的理解正确吗? 这...

21得票2回答
std::make_shared()使用自定义分配器吗?

考虑这段代码: #include <memory> #include <iostream> class SomeClass { public: SomeClass() { std::cout << "SomeClass()" &...

18得票2回答
如何结合std::make_shared和new(std::nothrow)?

C++的new运算符有一个选项,当分配失败时可以返回一个空指针而不是抛出bad_alloc异常。Foo * pf = new(std::nothrow) Foo(1, 2, 3); 是的,我理解这只能防止新对象抛出bad_alloc异常,但它不能防止Foo构造函数抛出异常。如果你想使用shar...

16得票2回答
C++11存储多个共享指针作为原始指针

我的问题涉及C++11中的shared_ptr和make_shared。我有两个向量,第一个存储智能指针,第二个存储原始指针。第一个向量的工作方式符合我的预期,但是第二个向量令人困惑... 代码示例#include <iostream> #include <vector&g...

15得票3回答
为什么boost库没有make_scoped()函数?

Boost的 make_shared() 函数承诺在尝试创建 shared_ptr 时具有异常安全性。 为什么没有相应于 make_shared() 的 make_scoped()等价物? 是否存在常见的最佳实践? 以下是来自boost::scoped_ptr 文档的代码示例,它似乎不安全...