了解 std::make_shared 和直接构造 std 之间的效率差异: :shared_ptr 可能是一项令人困惑的任务。在这里,我们深入进行详细比较,以阐明每种方法的复杂性。
考虑以下代码片段:
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); std::shared_ptr<Object> p2(new Object("foo"));
直接 std::shared_ptr构造:
std::make_shared用法:
关键区别在于所需的堆分配数量:
make_shared 中的这种单一分配消除了对显式新调用的需要,从而提高了效率。
Pre-C 17:
异常处理以前可能会造成影响造成严重破坏,因为原始指针可能无法安全地传递给共享指针构造函数。
C 17 及更高版本:
由于函数参数求值顺序的更改,此问题已得到解决。如今,异常得到了妥善处理,确保了内存完整性。
正如 Casey 指出的,一个潜在的缺点源于单一分配:
以上是`std::make_shared` 与 `std::shared_ptr`:哪个更高效?的详细内容。更多信息请关注PHP中文网其他相关文章!