![]() |
1
4
我同意使用智能指针是一个很好的方法,但至少有两种选择: a)复印可能不像你想象的那么贵。尝试实现值映射
b)用一个自己的类来包装向量来替换向量。在该类析构函数中,处理释放。您还可以提供添加和删除myObjects的方法。 |
![]() |
2
7
使用智能指针增强:共享指针而不是原始指针,这样当对象被破坏时,它也将清除堆分配的内存。 Boost::共享资源 http://www.boost.org/doc/libs/1_39_0/libs/smart_ptr/shared_ptr.htm 还有没有真正的原因有指向向量的指针?它们几乎不占用任何空间,并且std::map中的对象也不会移动(与向量中的对象不同,向量每次重新分配时都会移动/复制这些对象,例如获取更多空间)。 编辑: 另外,shared-ptr是tr1的一个组件,我很确定它在下一个标准中,所以您的编译器可能已经有了它。还有很多其他智能指针可以让你知道如何写自己的东西,在谷歌上快速搜索就能找到它们。 编辑2: 刚刚检查过,并且Visual Studio 2008的TR1实现包括共享的_ptr,它包含在 Visual C++ 2008 Feature Pack . 我预计许多其他供应商至少有部分TR1的实现可用,所以如果您不使用VS,请在供应商网站上搜索TR1支持。 |
![]() |
3
1
使用共享指针(如其他人建议的)是最佳解决方案。 如果你真的知道你会的话 从未 对他们了如指掌,那么他们就不需要再交易了。如果这真的是所期望的行为,只需记录下来,这样就不会有人在10周内出现,并将其误认为是真正的泄漏。 |
![]() |
4
1
谢谢大家的回答。我认为目前我倾向于一个价值向量的解决方案。主要原因是std::auto_ptr不适用于集合,因为它不可复制。这将是一个智能指针的唯一实现,我可以在不经历繁重的审查过程或滚动自己的过程的情况下使用它。 好消息是你的回答引导我走了一条很好的路。我了解了RAII,关于异常处理的危险以及如何将它们最小化,并且在我的设计中保持足够的警惕,我可以对它的“正确性”感到满意。 附件是一些我发现有帮助的链接。我希望任何遇到类似问题的人都能找到这些链接。
RAII Resource
|
![]() |
5
0
如果向量/映射中的不同条目之间没有共享每个指针的所有权,因此您只意味着减少在插入时完成的复制,那么您还应该考虑Boost Pointer Container 图书馆。 |
![]() |
6
0
详细说明在使用时尽量减少复制
仔细观察
坏榜样:
更好的:
->禁止复制 |
|
Julia · 矢量中相加为总和S的值的数量 1 年前 |
![]() |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 2 年前 |
![]() |
quantumwell · 将空向量放入std::map() 6 年前 |
![]() |
OutOfBound · 对未初始化内存使用算法的优点 6 年前 |
![]() |
DarthRubik · 在使用列表删除之后,迭代器如何不无效 6 年前 |