请问一个类资源释放的问题?
- C/C++ code
class A{public: A(void); ~A(void);private: int length; char * buf; A ** a;public: void SetA(int i); A * GetA(int i);};A::A(void):length(0),a(NULL){ buf=new char[10];}A::~A(void){ if(buf) delete [] buf; if(a) { for(int i=0;i<length;i++) { if(a[i]) delete a[i]; } delete [] a; }}void A::SetA(int i){ length=i; a=new A *[i]; for (int i=0;i<length;i++) { a[i]=new A; }}A * A::GetA(int i){ if(i>=0&&i<length) return a[i]; return NULL;}int main(){ A *a=new A; a->SetA(10); A *a1=a->GetA(1); delete a1; //这里误操作的话,delete a会发生内存读写错误的 delete a; system("pause"); return 1;}
请问有没有好的方法可以避免:
A *a1=a->GetA(1);
delete a1; 被释放而导致内存读写错误,请教一下呀?(不使用资源管理类:auto_ptr share_ptr)
[解决办法]
使用A &返回