向量推回在调用函数时调用析构函数

时间:2018-10-18 00:26:51

标签: c++ vector destructor

我有一个结构

struct Point
{

    int x,y;
    Point(int _x,int _y)
    {
    x=_x,y=_y;
    }
    int GetX()
    {
    return x;
    }
    int GetY()
    {
    return y;
    }

}

在我的程序中,如果我调用

Point *ptr=new Point(5,10);
vector<Point>allpts;
allpts.push_back(Point(ptr->GetX(),ptr->GetY());

此行之后

ptr在不应该后退后将被删除。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

在示例中,仅使用参数副本初始化所有数据成员的构造函数是没有意义的。当数据成员公开时,获取者也没有优点。提出您要求的唯一有趣的事情

  

ptr在不应该推后被删除。

observable是一个析构函数,用于告知被破坏的对象,因此您的示例中没有该对象。具有相同效果的代码:

#include <vector>
#include <iostream>

struct Point
{
    int x, y;
    ~Point() { std::cout << "Point dtor called for " << this << '\n'; }
};

int main()
{
    Point *ptr = new Point{ 5, 10 };
    std::cout << "ptr points to " << ptr << '\n';

    std::vector<Point>allpts;
    allpts.push_back(*ptr);

    // delete ptr;
}

样本输出(无delete ptr;):

ptr points to 0018DE58
Point dtor called for 0018DBF0

样本输出(带有delete ptr;):

ptr points to 0018DE58
Point dtor called for 0018DBF0
Point dtor called for 0018DE58

如您所见,除非明确完成,否则对象ptr指向的对象不会被删除。

相关问题