麻烦高手,看看函数如何返回对象的
- C/C++ code
class A{public: int len; char* p; A(int n) { len=n; p=(char*)malloc(n+1); memset(p,'a',n+1); printf("A\n"); } ~A() { delete p; len=0; printf("~A\n"); }};A CreateA() { A a(4); return a; }int main(){ A b=CreateA();//发现b并没有被赋值}代码如上,运行后,发现b还是空字符串。请问该如何修改,才能使b="aaaaa"?
原因:对象a在return之前就析构了。
[解决办法]
[解决办法]
已赋值啊
- C/C++ code
int main(){ A b=CreateA();//发现b并没有被赋值 for(int i = 0; i <= 4; ++i) { printf("%c", b.p[i]); }}
[解决办法]
重载=吧。因为你的类内部使用了指针,所以用=来做,用指针开辟内存,然后拷贝数据吧
[解决办法]
- C/C++ code
int main(){ A b=CreateA();//发现b并没有被赋值 printf("%d\n",b.len);}
[解决办法]
返回的是传值 会发生拷贝
写个拷贝构造函数
[解决办法]
这样的类成员中有指针的类一定要写三个函数:
拷贝构造函数,重载赋值操作符,析构函数