gpt4 book ai didi

c++ - 是什么阻止编译器自动推断使用 make_shared?

转载 作者:太空狗 更新时间:2023-10-29 23:03:38 27 4
gpt4 key购买 nike

我明白了:

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

效率高于:

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

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

"if I see new() in the same line as a shared_ptr declaration, use make_shared"

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

最佳答案

这可能是可以做到的,但是添加另一个特殊规则只是为了节省输入是无效的并且不是 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然后你就不需要额外的规则了。

关于c++ - 是什么阻止编译器自动推断使用 make_shared?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24991658/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com