我有一个结构
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在不应该后退后将被删除。
为什么会这样?
答案 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
指向的对象不会被删除。