是objPtr
包含指向有效内存的指针。
将元素插入到std::list
中时,list
将其复制一份。在你的情况下,元素是一个地址(一个指针),所以列表会复制地址并存储它。现在
object * optr = queue->pop_front();
OPTR指向的对象
queue->pop_front();
将删除list
所述元件(地址/指针),optr
已指向到对象。
完成对象后,请不要忘记删除它,否则最终会导致内存泄漏。
实施例:
#include <iostream>
#include <list>
using namespace std;
struct A
{
static int count;
A() : val(count++) { cout << "A(" << val << ")" << endl; }
~A() { cout << "~A(" << val << ")" << endl; }
int val;
};
int A::count = 0;
ostream& operator<<(ostream& os, A& a) { return os << a.val; }
int main()
{
list<A*> alist;
for (unsigned int i = 3; i; --i) alist.push_back(new A());
for (unsigned int i = 3; i; --i)
{
A * aptr = alist.front();
alist.pop_front();
cout << *aptr << endl;
delete aptr;
aptr = 0;
}
}
为什么这是低票? – sbi 2009-10-14 13:04:11
我没有downvote,但这里是我的观点:你不能简单地从原生指针切换到shared_ptr,所以这个答案不是很有用。 – foraidt 2009-10-14 13:34:48
为什么当你不完全了解需求时使用shared_ptr会更好。 – VNarasimhaM 2009-10-14 13:35:51