【发布时间】:2010-10-21 19:57:01
【问题描述】:
你怎么看?这是正确的还是存在内存泄漏?
来源:
#include <QList.h>
#include <boost/shared_ptr.hpp>
#include <iostream>
class A {
private:
int m_data;
public:
A(int value=0) { m_data = value; }
~A() { std::cout << "destroying A(" << m_data << ")" << std::endl; }
operator int() const { return m_data; }
};
int _tmain(int argc, _TCHAR* argv[])
{
QList<boost::shared_ptr<A> > list;
list.append(boost::shared_ptr<A>(new A(6)));
std::cout << int(*(list.at(0))) << std::endl;
return 0;
}
输出:
6
destroying A(6)
【问题讨论】:
-
作为旁注:不要使用
QList<T>wheresizeof(T) > sizeof(void*)(和sizeof( shared_ptr<T> ) == 2*sizof(void*),通常),因为在这种情况下QList将复制-new元素到列表中(而不是按价值持有)。请改用QVector或std::vector。