векторный pushback вызывающий деструктор при вызове функции - PullRequest
0 голосов
/ 18 октября 2018

У меня есть структура

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 голосов
/ 18 октября 2018

Нет смысла иметь конструктор, который только инициализирует все элементы данных с копиями параметров в вашем примере.Также получатели бесполезны, когда члены данных являются публичными.Единственное, что было бы интересно сделать ваше заявление

ptr, удаляется после отката, когда это не должно быть.

наблюдаемый, деструктор, который говорит ообъект разрушается, отсутствует в вашем примере.Код с тем же эффектом:

#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, не удаляется, если это не сделано явно.

...