我正在从Java转向C++,并且正在尝试理解对象的构造/析构。在Java中,当我执行以下操作时:
“旧的C被垃圾收集,另一个同名的变量被创建。如果我尝试在C++中做同样的事情,我会得到奇怪的行为。”
因为首先我创建A,然后创建B,接着A被销毁,作用域结束,所以B被销毁。
我得到的输出结果是:
创建-A-1456178128 创建-B-1456178131 销毁-B-1456178131 销毁-B-1456178131
所以我的A被创建但没有被销毁,而B则被错误地销毁了两次?
Myclass c=createANewObject();
c=createANewObject();
“旧的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");
}
不是得到
Init -A-
Init -B-
destr.A
destr.B
因为首先我创建A,然后创建B,接着A被销毁,作用域结束,所以B被销毁。
我得到的输出结果是:
创建-A-1456178128 创建-B-1456178131 销毁-B-1456178131 销毁-B-1456178131
所以我的A被创建但没有被销毁,而B则被错误地销毁了两次?
A
应该被摧毁?该对象仍在相同的作用域内,您只是给它赋了一个新值。 - StoryTeller - Unslander MonicaB
分配给了对象。这就是为什么第二次看到它的原因。你的对象不是A
和B
,而是c
和一个临时变量。 - StoryTeller - Unslander Monica