使用引用计数智能指针向量的好处很多。我不再需要担心清理内存,我甚至可以在容器中存储指向派生类的指针,它们也会处理得很好。
这一切都非常精彩,但它让我想知道其含义。如果我的容器能够正确地清理指向我可能插入的派生类的指针,那意味着必须发生某种类型的RTTI。即使我从未将派生类指针放入容器中,也会产生这种成本吗?
答案 0 :(得分:2)
我对大多数关于表现的问题的通常建议是:
正如另一个答案所说,这里没有RTTI;当引用计数降至零时,shared_ptr
只会调用delete
以正常方式销毁对象。 (或它做了有效等效的事情)
所涉及的任何性能影响应该仅限于T*
和shared_ptr<T>
之间的差异。 (虽然我不熟悉ptr_vector
....)
答案 1 :(得分:1)
没有RTTI,只是直接的多态性。如果你的类层次结构已经是多态的(即具有虚拟析构函数等),那么绝对不会有来自多态的额外成本。
应该担心的是共享指针的成本。如果可能,请查看unique_ptr<Base>
是否足够。共享指针的原子引用计数更新可能是一个不可忽视的成本。