C ++ STL容器的本地对象的地址

时间:2014-02-20 08:13:11

标签: stl

如果我将指针存储到容器中的堆栈对象怎么办?这也会安全吗?首先调用哪个析构函数:List<>析构函数,或(P1和P2)?可以肯定的是,这里不应该使用“删除”;因为这些都是堆栈对象,但编译器是否足够智能以避免破坏对象(& P1和& P2)? P1和P2超出范围时应自动销毁。

代码:

int main()
{
    list<MyPoint*> myList;
    MyPoint P1 = MyPoint(3,4);
    MyPoint P2 = MyPoint(1,2);

    myList.push_back(&P1);
    myList.push_back(&P2);

    return 0;
}

1 个答案:

答案 0 :(得分:0)

由于以与对象构造相反的顺序调用析构函数,因此代码中的P2P1将在myList之前被破坏。

此外,在销毁期间不会访问存储在myList中的指针。因此,即使您在P1之前声明P2myList,也是安全的。