15得票1回答
C++11:将“this”作为参数传递给std :: make_shared

我正在尝试使用std::make_shared将'this'传递给构造函数。 示例:// headers class A { public: std::shared_ptr<B> createB(); } class B { private: std::sha...

13得票1回答
使能 enable_shared_from_this 和 make_shared 提供相同的优化吗?

据我理解,make_shared<T>(...) 可能提供一些内存分配优化(它可以在与类 T 的实例相同的内存块中分配引用计数器)。 enable_shared_from_this 是否提供相同的优化呢?因此: class T : std::enable_shared_from...

12得票2回答
初始化shared_ptr成员变量,new和make_shared有什么区别?

当初始化一个shared_ptr成员变量时:// .h class Customer { public: Customer(); private: std::shared_ptr<OtherClass> something_; } // .cpp Customer():...

11得票2回答
std::make_shared构造函数参数数量

在 Visual Studio 2010/2011 中依然没有可变参数模板(variadic templates),这就导致了一个接受大量参数的构造函数可能会存在问题。例如,下面的代码将无法通过编译: MyMaterials.push_back(std::make_shared<M...

9得票6回答
如何让boost::make_shared成为我的类的友元

我已经写了一个带有保护构造函数的类,这样只能通过返回指向我的类的shared_ptr的静态create()函数来创建新实例。为了提供高效的分配,我想在create函数中使用boost::make_shared,但是编译器抱怨我的类构造函数是受保护的,无法在boost::make_shared中...

9得票2回答
boost::make_shared中的“single allocation”是什么意思?

在make_shared的boost文档中,它说: 除了便利和风格外,这样的函数也是异常安全的,并且由于它可以使用单个分配来分配对象及其对应的控制块,因此速度 considerably 更快,消除了 shared_ptr 构造开销的重要部分。 我不理解“单个分配”是什么意思?

9得票1回答
为什么shared_ptr<>必须单独为控制块和管理对象分配内存?

这个链接的问题是关于 make_shared&lt;&gt; 函数和 shared_ptr&lt;&gt; 构造函数之间是否有区别。 使用 make_shared 会发生什么 其中一部分回答是,make_shared&lt;&gt; 通常会在单个分配中为指向的对象和智能指针控制块分配内存。...

9得票3回答
为什么即使有类重载的 new/delete 运算符,'std::make_shared' 仍然会使用全局内存分配?

使用std::make_shared&lt;C&gt;时,不会调用类的重载new/delete操作符。 使用std::shared_ptr&lt;C&gt;、std::unique_ptr&lt;C&gt; 和std::make_unique&lt;C&gt;时,会使用类的重载new/del...

8得票3回答
shared_ptr的原始指针构造函数是一个错误吗?

回顾过去,如果C++11引入了make_shared,那么shared_ptr是否应该有一个接受原始指针的构造函数? 有支持这个构造函数的强有力的论据或用例吗? 这将避免已知的异常安全陷阱和使用make_shared的内存分配/性能优势。 我认为,要求通过make_shared构造sha...

7得票4回答
新的和make_shared用于共享指针

我发现这篇帖子中,@kerek SB的一个回答如下: std::shared_ptr&lt;Object&gt; p1 = std::make_shared&lt;Object&gt;("foo"); std::shared_ptr&lt;Object&gt; p2(new Object(...