繁体   English   中英

如何理解`std::make_shared<object> (“foo”)`?<div id="text_translate"><p> std::make_shared&lt;Object&gt;("foo")做什么?</p><pre> std::shared_ptr&lt;Object&gt; p1 = std::make_shared&lt;Object&gt;("foo");</pre><p> 我知道std::make_shared&lt;T&gt;是模板 class 并且我可以理解Object("foo")确实是临时的 object 。 但我无法理解std::make_shared&lt;Object&gt;("foo") 。</p><p> 有人可以逐步解释我创建的对象序列和它完成的操作吗?</p></div></object>

[英]How to understand `std::make_shared<Object>(“foo”)`?

std::make_shared<Object>("foo")做什么?

std::shared_ptr<Object> p1 = std::make_shared<Object>("foo");

我知道std::make_shared<T>是模板 class 并且我可以理解Object("foo")确实是临时的 object 。 但我无法理解std::make_shared<Object>("foo")

有人可以逐步解释我创建的对象序列和它完成的操作吗?

std::make_shared是模板 function,而不是模板 class。

该函数的模板参数指定要创建的类型。

函数的参数按原样传递给该类型的构造函数。

function 返回一个std::shared_ptr ,其中包含指向创建的类型的指针。

因此, std::make_shared<Object>("foo")动态创建一个用"foo"构造的Object实例,并返回一个std::shared_ptr<Object>持有指向该实例的指针。

这等效于以下内容(但不完全相同,因为在幕后还涉及其他优化):

std::shared_ptr<Object> p1(new Object("foo"));
std::make_shared<Object>("foo")

方法

请注意此代码开头的std::make_shared 它标识了一个 function。 如果我们将实际的 function 放在一边并退后一点,那么在 <> 符号和 () 符号之前,您有一个 function 名称。

通用的

在此代码中指定通用 T 在这种情况下指定为 Object。 将其视为临时的 object 并不是一个好主意。 这是一个规范。

通话

("foo")确保调用 function 并将参数传递给它。

底线

文档为您提供了对此的正确描述:

在此处输入图像描述

它告诉您指定类型的构造函数(在本例中为 Object)将被实例化,并将被包装在shared_ptr中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM