能否手动删除一个对象?

dongcat111 2003-03-08 09:54:51
我的主函数还没有运行完毕,但是我希望在某个时间删除掉刚才创建的一个对象,这样做是否可行?如果不行的话,有没有办法释放这个对象占用的资源?
...全文
97 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongcat111 2003-03-08
  • 打赏
  • 举报
回复
我真笨,不应该在每个*room前面都加上类型的,用基类指针就可以了。
Frank001 2003-03-08
  • 打赏
  • 举报
回复

Class1* myobject=new Class1;
……

delete myobject;

zhengjc 2003-03-08
  • 打赏
  • 举报
回复
应该是生命期的问题
Frank001 2003-03-08
  • 打赏
  • 举报
回复
这样就可以了,针对你的情况举了个简单的例子你看看吧,我就不解释了,如不明白再问我。

#include<iostream>
using namespace std;

class base
{
public:
virtual void show ()=0;
};

class Room1:public base
{
public:
virtual void show() { cout<<"Room1"<<endl; }
};

class Room2:public base
{
public:
virtual void show() { cout<<"Room2"<<endl; }
};

void main()
{
int condition;
cin>>condition;
base* room;
switch(condition)
{
case 1:
{
room = new Room1;
break;
}
case 2:
{
room = new Room2;
break;
}
default://这个最好写起来,不然都不满足的话会出错,或者在写个异常处理也可以。
{
room = new Room2;
break;
}

}
room->show();
delete room;
}
dongcat111 2003-03-08
  • 打赏
  • 举报
回复
谢谢楼上各位,我现在的新问题是,我需要根据不同情况建立一个对象。
比如情况1建立一个con1* p = new con1;情况2建立con2* p = new con2,……
我可以保证这些情况不会同时发生,也就是说同一时刻p只有指向一个对象。
这些对象都有一个show函数,但是函数的具体内容根据各对象的不同而不同。
我想用一个switch来选择建立哪一个对象,但是我无法在switch外调用对象的函数。我的代码如下:
switch(condition)
{
case 1:
{
Room1* room = new Room1;
break;
}
case 2:
{
Room2* room = new Room2;
break;
}

。。。。
}

room->show(); //这里就通不过了。

我实在不想在每个case里面都放一句room->show(),尽管这样行得通,有什么更好的办法可以解决吗?
toybearcn 2003-03-08
  • 打赏
  • 举报
回复
new出来的(heap上的)用delete就可以~
Cypher 2003-03-08
  • 打赏
  • 举报
回复
To 小石头
如果这样调用,在超出a的作用域时a.~A()会再被调用一次,可能会出问题。如果在栈里可以缩小其作用域:
{
A a;
...............
}
fanjiemail 2003-03-08
  • 打赏
  • 举报
回复
你可以先new 一个对象在 delete 不久搞定了
HaiFen 2003-03-08
  • 打赏
  • 举报
回复
如果你的对象在栈里也可以直接调用析构函数.
A a;
a.~A();
windcsn 2003-03-08
  • 打赏
  • 举报
回复
只要你的对象是new出来的就可以在任意时间通过delete删除它
mare 2003-03-08
  • 打赏
  • 举报
回复
只要你的对象在堆里就可以

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧