- 论坛徽章:
- 0
|
LZ,在你说结果的时候,应该附上你所使用的编译器。
我的分析如下
----------------------------------------------------------
main调用的如果是
1 Stock myStock=2;
2 myStock=Stock("a",1.0);
3 myStock=Stock("abcde",3.0);
with param constractor -> 由1产生,此处并未产生临时变量。
with param constractor -> 由2Stock("a",1.0)产生,由于这里Stock("a",1.0),是一个临时变量,所以会有一个对应的析构
destory stock name:a ByeBye! -> 2处对应的析构
with param constractor -> 同上面的道理,由3Stock("abcde",3.0)产生,同理是一个临时变量,所以会有一个析构
destory stock name:abcde ByeBye! -> 3处对应的析构
destory stock name:abcde ByeBye! -> 由1处产生,因为程序结束,所以myStock会调用析构,并且此时myStock中的m_name,已经被第3行的调用修改,所以也显示为abcde
----------------------------------------------------------
main调用的如果是
1 Stock myStock=Stock("a",1.0);
2 myStock=2;
3 myStock=Stock("abcde",3.0);
with param constractor
destory stock name:a ByeBye!
with param constractor
destory stock name:defautl name ByeBye!
with param constractor
destory stock name:abcde ByeBye!
destory stock name:abcde ByeBye!
析构函数调用四次!这个2对象被销毁了。
那为什么第一个不销毁那个2对象呢?
这个应该是错误的,构造的次数应该和析构的次数是成对的
我的结果如下 (g++ (GCC) 4.5.2)
with param constractor
with param constractor
destory stock name:defautl name ByeBye!
with param constractor
destory stock name:abcde ByeBye!
destory stock name:abcde ByeBye!
原因同上面的分析。
|
|