【发布时间】:2021-01-03 10:43:54
【问题描述】:
编辑:我指的是 std::make_shared 和 std::make_shared,而不是它们的实际构造函数。我已经编辑了标题,但下面的文字仍然在谈论构造函数。忽略我使用“构造函数”这个词
我正在尝试了解智能指针如何在幕后工作,但源文件似乎超出了我的理解范围,所以我想也许这里有人可以帮助我。智能指针的构造函数的声明和实现是如何工作的?
通常,您可以像这样创建构造函数:
Object(SomeType member) : member_(member) {}
智能指针显然使用类模板让编码人员选择指针将指向的类型,但构造函数也接受构造指针将指向的类型的对象所需的参数。这是如何实现的?当我们不知道需要多少或什么类型的参数,因为我们不知道我们将要构造的对象的类型时,如何创建这样的构造函数?
Object(/*???*/) : member_(new SomeType(/*???*/)) {}
【问题讨论】:
-
叫做可变参数模板
-
but the constructor智能指针只接受一个指针,对象是在智能指针之外构造的。至于来源,见前。 std::make_unique from glibc - 调用new是可变参数,调用std::unique_ptr获取指针。 -
我非常推荐 Arthur O'Dwyer 的书《Mastering the C++17 STL》,其中详细讨论了这一点,并给出了一个比默认实现更易于阅读的示例实现。
标签: c++