也许我说的不清楚,现在写出来。class a{
a(int* m);
virtual ~a();
int* n;
};
a::a(int* m){
n=m;
}
a::~a(){
free n ;//这句要不要?
}
void main90
{
int m;
a obj(&m);
......
}

解决方案 »

  1.   

    我参考了许多例子,发现例子里都没有free,感觉不对头,请指教,3x。
      

  2.   

    delete 与new操作是相对的,如果没有new,比如你上面的程序,就不需要delete操作。因为程序运行完毕m也就不存在了。如果main改为{
    int *m=new int;
    a obj(m)
    }
    则有两种选择,可以在主程序中delete,也可以在class中delete,但在class中delete必须考虑如果该类析构之后不会再引用该m。一般不会在class中delete,而在使用new的代码下delete,可读性好,又安全
    。在class的构造函数中使用new就另当别论了但有时必须在析构函数中delete,甚至在不同的线程中删除另一个线程中创建的对象。会很麻烦
      

  3.   

    另外在delete之后可以考虑把指针赋为null,这样以后再引用该指针windows会提示引用了非法地址。避免程序运行到不可预制的地方,调试很有用。建议你看看Effective c++
      

  4.   

    free 在VC里面很麻烦,时常有debug出来,delete用起来顺手一点,但是不在同一个线程还是有问题