向量推回调用析构函数时调用析构函数
vector pushback calling destructor on calling a function
我有一个结构
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 在推回后被删除,而不应该
。为什么会这样?
在示例中,使用仅使用参数副本初始化所有数据成员的构造函数是没有意义的。此外,当数据成员公开时,getter 也没有价值。提出索赔的唯一兴趣
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
指向的对象不会被删除。
相关文章:
- 什么时候调用析构函数
- C++-明确何时以及如何调用析构函数
- C++ 防止在映射中放置()时调用析构函数
- 调用析构函数以释放动态分配的内存
- C++:使用方法调用析构函数的顺序是什么?
- 向量推回调用析构函数时调用析构函数
- 如何在调用析构函数时优雅地停止/销毁带有阻塞调用C++线程?
- C++,我应该调用析构函数吗?
- 如何获取有关在 Clang LibTooling 中调用析构函数的信息?
- 当我从 std::vector 中的新放置调用析构函数时会发生什么?
- 为什么这里不调用析构函数
- 在调用 std::bind 的产品后意外调用析构函数
- 为什么在传递给函数而不是构造函数时调用析构函数?
- 如何在C++中调用析构函数
- 为什么为未删除的对象调用析构函数?
- 调用析构函数时出错
- C++ 在不释放内存的情况下调用析构函数
- 为什么在运算符删除中不调用析构函数?
- C++ 调用析构函数后动态模板队列"double free or corruption (out)"
- 在 postOrderDelete 上调用析构函数时引发的异常