我经常遇到创建多态对象数组或 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/