class A{
char * a;
public:
A(){a=NULL;}
A(int i){a=new char[i];}
A(char * b){a=b;}
~A(){}//这个不知道怎么写,
};
问题:a可能指向数组也可能动态new出来的,不知道析构如何写

解决方案 »

  1.   

    A(char * b){a=b;}
    这里用复制内容过去.
    A(char * b){strcpy(a,b);假设分配给a的内存足够大}
    这个时候析构函数就可以写了
      

  2.   

    咱们能换种方法吗?C++中无法判断一个指针,是指向一个动态NEW出的,或者静态的空间?
      

  3.   

    无法判断是指向new出来的空间还是指向栈上的空间一个原则:构造函数中获得内存的方法要一致
      

  4.   

    简单方法,加个成员变量,bool is_new;在调用new之后给这个变量赋值,析构函数如果发现是new了就delete[],如果没有就什么也不干。
      

  5.   

    A(char * b){a=b;}
    这样做是不好的最好把内容拷过来.char str[100] = {"123"} ;
    A a1(str);
    //...
    A a2(str);
    //...修改a1.b指向的内容,会修改a2.b指向的内容