gpt4 book ai didi

c++ - 为什么使用类的引用或唯一指针成员是一件坏事?

转载 作者:行者123 更新时间:2023-11-30 01:34:10 32 4
gpt4 key购买 nike

在 Herb Sutter 和 Andrei Alexandrescu 合着的《C++ Coding Standards. 101 Rules, Guidelines, and Best Practices》一书中,Rule 52 最后的引用是:

"In rare cases, classes that have members of strange types (e.g., references, std::auto_ptrs) are an exception because they have peculiar copy semantics. In a class holding a reference or an auto_ptr, you likely need to write the copy constructor and the assignment operator, but the default destructor already does the right thing. (Note that using a reference or auto_ptr member is almost always wrong.)"

很明显为什么使用引用作为成员不是一个好主意(这个问题的答案在这篇文章中:Should I prefer pointers or references in member data?)

  1. 关于现代 C++,这是否也意味着使用 unique_ptr 作为类成员通常是一件坏事?或者这只是 auto_ptr 的问题,可能缺少移动语义?
  2. 那么应该将 shared_ptr 用于多态行为吗?

提前致谢!

最佳答案

  1. With regard to a modern C++, does it also mean that using unique_ptr as a class member is usually a bad thing?

这并不意味着,使用唯一指针并不是一件坏事。

Or was it a problem only of auto_ptr and missing move semantics maybe?

主要问题是 auto_ptr 的复制转移了指向资源的所有权。这就是作者所说的“特殊的复制语义”。

鉴于 const auto_ptr 无法复制,它不像非 const 那样危险。它有小众用途,但不可复制类型的使用在 C++11 之前非常有限。

唯一指针没有特殊的复制语义。事实上,唯一指针根本不可复制。在类型可以移动的 C++11 中,这不是什么大问题。唯一指针涵盖了 auto_ptr 可用的所有用例,以及 auto_ptr 不可靠的其他用例。

  1. Should shared_ptr be used for a polymorphic behavior then?

可以使用共享指针,但不是必须的。

附言auto_ptr 在 C++11 中被弃用,并在 C++17 中完全从标准库中删除。

关于c++ - 为什么使用类的引用或唯一指针成员是一件坏事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56833746/

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