QList和shared_ptr

Wol*_*ngP 5 c++ qt boost qlist

你怎么看?这是正确的还是有内存泄漏?

资源:

#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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

6
destroying A(6)
Run Code Online (Sandbox Code Playgroud)

小智 1

看来是对的。Boost的shared_ptr是一个引用计数指针。如果对象之间没有循环引用,引用计数能够回收内存。在您的情况下,A 类的对象不引用任何其他对象。因此,您可以无忧无虑地使用shared_ptr。此外,所有权语义允许在 STL(和 Qt)容器中使用共享指针。