我正在从java转向c ++,我试图理解构造/破坏对象.在java时,我这样做
Myclass c=createANewObject();
c=createANewObject();
Run Code Online (Sandbox Code Playgroud)
旧的c是垃圾收集的,另一个是用同一个名称创建的.
如果我尝试在c ++中做同样的事情我会得到奇怪的行为.
class my_class
{
string content;
time_t t;
public:
my_class(string c);
~my_class();
};
my_class::my_class (string c)
{
content=c;
cout<<"Init -" << content << "-" << t <<endl;
}
my_class::~my_class()
{
cout<<"Destroyed -" << content << "-" << t <<endl;
}
my_class get_new_object(string s)
{
my_class c(s);
return c;
}
int main()
{
my_class c=get_new_object("A");
c=get_new_object("B");
}
Run Code Online (Sandbox Code Playgroud)
而不是得到
Init -A-
Init -B-
destr.A
destr.B
Run Code Online (Sandbox Code Playgroud)
因为首先我创建A,然后创建B,然后A被销毁,并且范围结束,因此B被销毁
我明白了
Init -A-1456178128 Init -B-1456178131 Destr.B-1456178131 Destr.B-1456178131
所以我的A被创造而不被摧毁,而B ......被摧毁了两次?
c++ ×1