如何在c++中删除对象
How to delete objects in c++?
我有一个由创建的指针
Shell* shell = new Shell();
通过初始化
if (!shellTexture->initialize(graphics, SHELL_IMAGE))
throw(GameError(gameErrorNS::FATAL_ERROR, "Error initializing shell texture"));
if (!shell->initialize(this, ShellNS::WIDTH, ShellNS::HEIGHT, ShellNS::TEXTURE_COLS, shellTexture))
throw(GameError(gameErrorNS::FATAL_ERROR, "Error initializing shell game object"));
和
shell.draw();
当炮弹与我的玩家碰撞时,我想摧毁它。我想每x秒也繁殖一次。
我没有使用任何数组或向量来存储其中的对象。
delete shell;
程序在中与我的播放器发生碰撞时崩溃
if (shell->collidesWith(*player,collisionVector))
{
delete shell;
//and damage player
}
如何删除外壳?
实现这一点的最简单方法是什么,这样我就可以从内存中清除它,并能够重新初始化shell?
编辑:我是一个真正的傻瓜在指针
行
type ptr = new type(args);
(1) 分配足够的内存来保存类型为type
的对象,(2)通过用参数args
调用其构造函数来创建类型为type
的对象,以及(3)将创建的对象的内存地址分配给指针ptr
。
然后,您可以使用通过存储在ptr
中的地址创建的对象,例如ptr->member_function(args)
。相反,线
delete ptr;
尝试(1)为type
的对象调用析构函数,以及(2)取消分配与该对象相关联的内存。它不会更改ptr
的值,即删除后,指针变为悬挂指针:其值(地址)不再引用有效对象的值。
因此,尝试使用悬空指针(例如通过ptr->member_function(args)
)是错误的,很可能会使程序崩溃。同样,调用
delete ptr;
已删除指针上的再次格式错误,很可能也会使程序崩溃。为了避免这种格式错误的代码,您可以在删除后将ptr
设置为空,即
delete ptr;
ptr = nullptr;
当(1)你可以很容易地验证ptr
是否仍然有效(只有nullptr
才能转换为布尔)和(2)避免双重删除的问题,如
delete nullptr;
是无害的(什么都不做)。
编辑。在您的情况下,type
=Shell
,ptr
=shell
,即您的变量shell
是指向Shell
的指针。
还要注意的是,通常建议避免使用delete
(甚至new
),而是使用智能指针,如std::unique_ptr<>
,当它们超出范围时,它将自动delete
所指向的对象,从而在没有内存泄漏的情况下启用异常安全代码。
- 迭代时从向量和内存中删除对象
- C++从对象自己的类中删除对象
- 如何通过对象的类属性删除对象,并返回其对象值?
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 从列表C++中删除对象
- c++ 循环访问对象列表并删除对象
- 从对象本身的容器中删除对象
- 从尝试引用已删除函数的矢量 C++ 中删除对象
- 如何通过指向元组的共享指针删除对象
- 防止通过接口删除对象
- 在 c++ 中从内存中删除对象
- 当对象被删除时,复制被删除对象的对象如何
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 从内存中删除对象
- 通过C++中的删除方法自行删除对象
- C++ - 析构函数只是释放内存还是实际删除对象
- 如何通过存储在 std::list 中的指针删除对象?
- 如何通过对象参数从指针矢量中删除对象和指针
- 我可以删除对象的右值版本的函数吗?
- 使用对象的索引从矢量中删除对象