[英]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.