如何使用 `make_shared` 创建指针
How to create pointer with `make_shared`
我正在查看此页面 http://www.bnikolic.co.uk/blog/ql-fx-option-simple.html,关于执行 shared_pointer。
有这样一行-
boost::shared_ptr<Exercise> americanExercise(new AmericanExercise(settlementDate, in.maturity));
我明白,通过这一行,我们基本上是在创建一个名称为 americanExercise
的 shared pointer
,它指向一个 class Exercise
的对象。
但我想知道如何用 make_shared
重写这一行,因为人们认为 make_shared
是定义指针的更有效方法。下面是我的尝试 -
shared_ptr<Exercise> americanExercise = make_shared<Exercise>(AmericanExercise(settlementDate, in.maturity));
然而,这失败并出现错误 -
error: use of undeclared identifier 'make_shared'
shared_ptr<Exercise> americanExercise = make_shared<Exercise>(AmericanExercise(settlementDate, in.maturity));
在这种情况下,您能否帮助我理解 make_shared
的用法。
非常感谢您的帮助。
您似乎缺少第二个示例中的名称空间。您也可以在 make_shared
.
中构建派生类型
boost::shared_ptr<Exercise> americanExercise = boost::make_shared<AmericanExercise>(settlementDate, in.maturity);
除了@Caleth 的有效答案还有两点:
基础 class 与派生 class
使用 make_shared
创建指针时,您必须使用实际派生的 class 并为该 class 的构造函数传递参数。它不知道 base-class 与 derived-class 的关系。您可以通过赋值将其用作指向基 class 的共享指针(您会注意到,这是指向不同的共享指针类型)。
考虑使用标准库。
一个make_shared()
函数和一个共享指针class在C++14之后的标准库中可用,所以你可以这样写:
#include <memory>
// ...
std::shared_ptr<Exercise> americanExercise =
std::make_shared<AmericanExercise>(settlementDate, in.maturity);
到目前为止,standard-library 共享指针更为常见,因此如果您打算将它们传递给其他人编写的代码,您可能应该更喜欢它们。当然,如果你广泛使用 Boost,那也没关系。
我正在查看此页面 http://www.bnikolic.co.uk/blog/ql-fx-option-simple.html,关于执行 shared_pointer。
有这样一行-
boost::shared_ptr<Exercise> americanExercise(new AmericanExercise(settlementDate, in.maturity));
我明白,通过这一行,我们基本上是在创建一个名称为 americanExercise
的 shared pointer
,它指向一个 class Exercise
的对象。
但我想知道如何用 make_shared
重写这一行,因为人们认为 make_shared
是定义指针的更有效方法。下面是我的尝试 -
shared_ptr<Exercise> americanExercise = make_shared<Exercise>(AmericanExercise(settlementDate, in.maturity));
然而,这失败并出现错误 -
error: use of undeclared identifier 'make_shared'
shared_ptr<Exercise> americanExercise = make_shared<Exercise>(AmericanExercise(settlementDate, in.maturity));
在这种情况下,您能否帮助我理解 make_shared
的用法。
非常感谢您的帮助。
您似乎缺少第二个示例中的名称空间。您也可以在 make_shared
.
boost::shared_ptr<Exercise> americanExercise = boost::make_shared<AmericanExercise>(settlementDate, in.maturity);
除了@Caleth 的有效答案还有两点:
基础 class 与派生 class
使用 make_shared
创建指针时,您必须使用实际派生的 class 并为该 class 的构造函数传递参数。它不知道 base-class 与 derived-class 的关系。您可以通过赋值将其用作指向基 class 的共享指针(您会注意到,这是指向不同的共享指针类型)。
考虑使用标准库。
一个make_shared()
函数和一个共享指针class在C++14之后的标准库中可用,所以你可以这样写:
#include <memory>
// ...
std::shared_ptr<Exercise> americanExercise =
std::make_shared<AmericanExercise>(settlementDate, in.maturity);
到目前为止,standard-library 共享指针更为常见,因此如果您打算将它们传递给其他人编写的代码,您可能应该更喜欢它们。当然,如果你广泛使用 Boost,那也没关系。