3

我明白:

shared_ptr<X> x = make_shared<X>();

比:

shared_ptr<X> x(new X());

我了解这些优势。但是,我不明白为什么编译器不能有这样的规则

“如果我new()在同一行看到shared_ptr声明,请使用 make_shared

那么是什么阻止编译器自动使用make_shared并要求我们指定它呢?

4

1 回答 1

1

可能可以做到,但是添加另一个特殊规则只是为了节省打字是无效的,也不是 c++ 的哲学,如果有人想出一个更好的 shared_ptr 怎么办,如果 std::shared_ptr 是一个模板,那么就做一个 better_shared模板,你就完成了。如果它进入核心语言,尽管它永远存在。

另请注意,它不会节省太多打字:

auto x = make_shared<X>()对比shared_ptr<X> x(new X())

它也比“如果我看到new()并且共享指针然后使用make_shared”更复杂,因为make_shared只替换了 shared_ptr 构造函数的 13 个(我认为)重载之一。这些规则无疑是标准中已经足够大的页面。只需使用make_shared,然后您就不需要额外的规则。

于 2014-07-28T09:15:40.987 回答