Abh*_*and 1 c++ inheritance memory-leaks composition stdvector
我很惊讶在调用erase时发现了vector :: erase移动元素.我认为它会将最后一个元素与"待删除"元素交换,并将大小减小一个.我的第一反应是:"让我们扩展std :: vector并覆盖erase()".但是我在很多线程中发现了" 从C++ STL容器中获取真的风险吗? ",它会导致内存泄漏.但是,我没有向vector添加任何新的数据成员.因此没有额外的内存可以释放.还有风险吗?
有些人认为我们应该更喜欢构成而不是继承.在这种情况下,我无法理解这个建议.为什么我要浪费我的时间在"机械"任务中包装其他精彩的std :: vector类的每个函数.继承确实对这项任务最有意义 - 或者我错过了什么?
cdi*_*ins 11
为什么不写一个符合你想要的独立功能:
template<typename T>
void fast_erase(std::vector<T>& v, size_t i)
{
v[i] = std::move(v.back());
v.pop_back();
}
Run Code Online (Sandbox Code Playgroud)
所有这些都归功于Seth Carnegie.我最初使用"std :: swap".
| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |