如何理解`std::make_shared<Object>("foo")`?
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")
确实是一个临时对象。但是我看不懂std::make_shared<Object>("foo")
.
谁能一步一步地向我解释创建对象的顺序和它完成的操作?
std::make_shared
是模板函数,不是模板class。
函数的模板参数指定要创建的类型。
函数的参数按原样传递给该类型的构造函数。
函数 returns 一个 std::shared_ptr
保存指向所创建类型的指针。
因此,std::make_shared<Object>("foo")
动态创建一个 Object
用 "foo"
构造的实例,并且 returns 一个 std::shared_ptr<Object>
持有指向该实例的指针。
这相当于以下内容(但不完全相同,因为幕后涉及额外的优化):
std::shared_ptr<Object> p1(new Object("foo"));
std::make_shared<Object>("foo")
方法
请注意此代码开头的 std::make_shared。它标识一个函数。如果我们把实际的函数放在一边,退后一步,那么在 <> 符号和 () 符号之前你有一个函数名。
通用
这段代码中的指定泛型T在本例中指定为Object。将其视为临时对象并不是一个好主意。是规范。
来电
("foo") 确保调用该函数并将参数传递给它。
底线
documentation 为您提供了正确的描述:
它告诉您指定的给定类型(在本例中为 Object)的构造函数将被实例化并包装在 shared_ptr.
中
std::make_shared<Object>("foo")
是做什么的?
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo");
我知道 std::make_shared<T>
是模板 class 我可以理解 Object("foo")
确实是一个临时对象。但是我看不懂std::make_shared<Object>("foo")
.
谁能一步一步地向我解释创建对象的顺序和它完成的操作?
std::make_shared
是模板函数,不是模板class。
函数的模板参数指定要创建的类型。
函数的参数按原样传递给该类型的构造函数。
函数 returns 一个 std::shared_ptr
保存指向所创建类型的指针。
因此,std::make_shared<Object>("foo")
动态创建一个 Object
用 "foo"
构造的实例,并且 returns 一个 std::shared_ptr<Object>
持有指向该实例的指针。
这相当于以下内容(但不完全相同,因为幕后涉及额外的优化):
std::shared_ptr<Object> p1(new Object("foo"));
std::make_shared<Object>("foo")
方法
请注意此代码开头的 std::make_shared。它标识一个函数。如果我们把实际的函数放在一边,退后一步,那么在 <> 符号和 () 符号之前你有一个函数名。
通用
这段代码中的指定泛型T在本例中指定为Object。将其视为临时对象并不是一个好主意。是规范。
来电
("foo") 确保调用该函数并将参数传递给它。
底线
documentation 为您提供了正确的描述:
它告诉您指定的给定类型(在本例中为 Object)的构造函数将被实例化并包装在 shared_ptr.
中