c++自动回收的有关问题,对象从子函数返回后还能生效

c++自动回收的问题,对象从子函数返回后还能生效
C/C++ code

#include "stdafx.h"
#include <iostream>
using namespace std;

class A{ 
    int v; 
    char* name;
public: 
    A(char* n){
        this->name = n;
        v=3;
        cout   << name << "-->create "   <<   endl;
    } 
    ~A(){
        cout   << name << "-->Destroy "   <<   endl; 
    }
    void setValue(int v){
        this->v =v;
    }
    int getValue(){
        return v;
    }
}; 

A getA(){
    A a("getA()") ;//= new A("getA()");
    a.setValue(1999);
    A* b =&a;
    return a;
}
int _tmain(int argc, _TCHAR* argv[]){
    A c = getA(); 
    A *d =(&c);
    c.setValue(6000);
    cout << "c.getValue:" << c.getValue() <<   endl; //这里正常
    delete d; //这里就出错了
    return 0; 
}



输出结果:
getA()-->create
getA()-->Destroy
c.getValue6000
getA()-->Destroy

------解决方案--------------------
查一查 拷贝构造函数
------解决方案--------------------
算是半自动的垃圾回收机制
楼主搞懂了destructor怎么使用后
可以google一下STL和smart pointer
在现代C++编程中,我们几乎都不会呼叫delete的啦
资源有99%以上的情况都交给STL和smart pointer管理了(使用Qt时除外)
------解决方案--------------------
探讨

引用:

楼主学java还是。net的
C++没听说有自动回收啊

我是学java的,现在又要搞c++.
如果执行完这个getA()方法后,方法中的a会执行析构函数,这是不是叫"自动回收"啊?

------解决方案--------------------
只有new出来的对象(堆上面分配的对象)才能delete....

直接"A c;"这样的代码是在栈上分配的,不能手动调用delete。


堆上分配/析构方法:
A* a = new A;
delete a;

栈上分配方法:
A a;
栈上分配的对象,只要出了花括号自动会析构,不用担心内存泄漏,但是这不算自动回收机制。
{
A a; //-->构造了A对象
} //-->花括号结尾析构了A对象

你的"getA();"返回的是A对象的一个拷贝,这个拷贝也是在栈上分配的。