小编Cic*_*cio的帖子

C++对象销毁

我正在从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++

7
推荐指数
2
解决办法
897
查看次数

标签 统计

c++ ×1