【发布时间】:2010-05-21 17:31:08
【问题描述】:
我刚刚发现了 auto_ptr 的概念并且很喜欢它!由于 Qt 经常需要 QList 或 QVector,所以有什么具体的理由应该避免使用 auto_ptr。如果我是对的,它允许你替换这个:
std::vector<MyClass*> vec;
/* add several elements to the vector and do stuff with them */
for(size_t i=0; i<vec.length(); ++i)
{
delete vec[i];
}
vec.clear();
一些更短的东西(即没有清理)
std::vector<auto_ptr<MyClass>> vec;
/* add several elements to the vector and do stuff with them */
// no need for the delete loop
...Qt 仍然可以使用 auto_ptr 的共享内存魔法吗?父子自动内存管理是否仍然透明运行?谢谢
【问题讨论】:
-
You don't want to use a container of
auto_ptrobjects。你可以改用shared_ptr,虽然我从来没有用过Qt,也不能说它在各种形式的智能指针上的表现如何。 -
或者你可以使用一个专门用来存放指针的容器。 boost:ptr_vector
-
@Martin,或者更好的是,您可以使用 QVector,它也被设计为指针向量,按值保存小于指针的类型,并提供 Qt 容器的所有优点。
-
@iconiK:我对 QVector 不是很熟悉。但是阅读文档并不能保证向量接管所包含指针的所有权并在向量被销毁时销毁它们,从而导致 boost:ptr_vector 应该解决的所有问题。
-
@Martin,错误,我的意思是 QList (对 SO 感到厌倦并不好)。 QVector 等价于 std::vector。