c++ - 多态对象数组

标签 c++ arrays reference polymorphism smart-pointers

我经常遇到创建多态对象数组或 vector 的需要。我通常更喜欢对基类使用引用而不是智能指针,因为它们往往更简单。

数组和 vector 被禁止包含原始引用,因此我倾向于使用指向基类的智能指针。但是,也可以选择使用 std::reference_wrapper 代替:https://en.cppreference.com/w/cpp/utility/functional/reference_wrapper

从文档中我可以看出,这是它的预期用途之一,但是当包含多态对象的数组主题出现时,常见的建议似乎是使用智能指针而不是 std::reference_wrapper.

我唯一的想法是智能指针可能能够更整洁地处理对象的生命周期?

长话短说:博士;为什么在创建多态对象数组时,智能指针(例如 std::unique_ptr)似乎优于 std::reference_wrapper

最佳答案

简单来说:

  • unique_ptr 是对象的所有者。它管理拥有对象的生命周期

  • reference_wrapper 包装指向内存中对象的指针。它管理包装对象的生命周期

您应该创建一个 unique_ptr(或 shared_ptr)数组,以保证在不再需要对象时释放该对象。

关于c++ - 多态对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52222665/

相关文章:

c++ - 隐藏在派生类中的成员函数

php - C++ map 查找性能与 PHP 数组查找性能

macos - 是否可以在文件系统上创建 "weakly referenced"硬链接(hard link)?

php - 返回基于二维数组内容的 mysql 查询

c# - Visual Studio 项目 : How to include a reference for one configuration only?

rust - 为什么不能在同一结构中存储值和对该值的引用?

c++ - 如何使用 Websocketpp 发送消息

c++ - 无法在 Release模式下从字节数组加载 QImage

c++ - Qt 异步调用 : how to run something after an async call has finished its job

php - 查找数组是否至少有 1 个值