#include <list>
#include <iostream>
struct Foo
{
Foo(int a):m_a(a)
{}
~Foo()
{
std::cout << "Foo destructor" << std::endl;
}
int m_a;
};
int main( )
{
std::list<Foo> a;
Foo b(10);
std::cout << &b << std::endl;
a.push_back(b);
Foo* c = &(*a.begin());
std::cout << c << std::endl;
a.erase(a.begin());
std::cout << a.size() << std::endl;
c->m_a = 20;
std::cout << c->m_a << std::endl;
std::cout << b.m_a << std::endl;
}
结果是:
0x7fff9920ee70
0x1036020
Foo destructor
0
20
10
Foo destructor
我通常认为在删除列表中的一个对象后我不能再访问thar 对象的成员变量。但是在上面我仍然可以访问 c->m_a
在我删除了 c
指向的对象之后,为什么?
最佳答案
使用 Foo* c = &(*a.begin());
您创建了一个指向您有意销毁的对象的指针(通过 erase()
).然而,对象的内存仍然存在(因为这是一个非常简单的应用程序,并且操作系统没有为其他东西声明它)。
因此,您可以有效地使用不再属于您的内存。
关于c++ - 为什么我可以在列表中删除对象后访问其成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21854374/