成员函数中删除当前实例后的有关问题
成员函数中删除当前实例后的问题当成员函数删除当前实例的时候,一般应该怎么停止后面的代码执行。先上代码:
成员函数中删除当前实例后的问题
当成员函数删除当前实例的时候,一般应该怎么停止后面的代码执行。
先上代码:
#include <iostream>
class A;
void callfun(int i,A *pt);
class A {
public:
A() { sss="this is A."; }
virtual ~A() {}
void foo(int i) {
callfun(i,this); //调用函数,如果条件符合会删除当前实例
out(); //输出内容
}
private:
void out() {
std::cout<< "Out:" <<std::endl;
std::cout<< sss << std::endl;
}
std::string sss;
}
void callfun(int i,A *pt) {
if (i==0)
delete pt; //条件符合时,删除实例
}
int main() {
A *a1=new A;
a1->foo(1); //这行打印:Out:this is A.
a1->foo(0); //这行删除a1,不打印,但是事实它还是会打印的。请问如何解决?
}
我希望执行的效果是foo(1)时打印,foo(0)时删除条件成立,删除实例,不再打印。请指教。
[解决办法]代码我拷贝过去,怎么总是不对,有不认识的字符,但是找不出哪个字符不对。
[解决办法]你确定你的程序没有出错。你delete this 后然后继续调用out, out里面还输出sss 程序没有挂掉?
[解决办法]新手学习了啊
[解决办法]让 callfun 删除时返回 1,foo 里面监测返回值,是 1 的话立即返回吧。即便这样也有问题,因为严格来讲,delete this 以后就不能调用成员函数了,不过你这个好像也不算调用,而是返回到成员函数,总之很 tricky,有空翻翻标准,看看是不是 UB. 不明白楼主为什么要这么设计,同样的删除逻辑放在 main 里面不是更好吗。
[解决办法]自己的成员函数里干掉自己,相当于使用已经收回的堆内存 ,
这是不正确的,哪怕当时输出没有问题也有很大隐患。
详情科普 野指针.
[解决办法]VS2010里面已经报了内存错误。而已delete了后一般要将指针指向NULL。你这样已经成了野指针
[解决办法]delete this; 本身没问题,只是很危险,看看这个 http://www.parashift.com/c++-faq-lite/delete-this.html
[解决办法]将类的实例析构后仍想调用的成员函数声明为static public?