c++一段代码里面调用某个类的析构函数多少次?

peterli 发布于 2012/08/15 14:13
阅读 336
收藏 1

<无详细内容>

以下是问题补充:

@peterli:void fcn(const Sales_item *trans, Sales_item accum) { Sales_item item1(*trans), item2(accum); if (!item1.same_isbn(item2)) return; if (item1.avg_price() <= 99) return; else if (item2.avg_price() <= 99) return; //... } (2012/08/15 14:16)
加载中
0
peterli
peterli
void fcn(const Sales_item *trans, Sales_item accum)
 { Sales_item item1(*trans), item2(accum); 
   if (!item1.same_isbn(item2)) return; 
   if (item1.avg_price() <= 99) return; 
   else 
    if (item2.avg_price() <= 99) 
     return; //...
 }


0
peterli
peterli
问,上面的代码中发生了多少次的析构函数调用? c++ primer上面的
peterli
peterli
回复 @billzheng : 谢谢,我明白了
billzheng
billzheng
另外你的same_isbn函数原型应该是 bool same_isbn(const Sales_item& item); 这样在调用same_isbn的时候没有发生临时拷贝以及析构
billzheng
billzheng
回复 @peterli_xue : 应该是3次。item1,item2是局部变量,需要被析构;accum是传值,所以这里有个拷贝对象被析构;trans是指针,所以没有被析构。
peterli
peterli
回复 @billzheng : 我想应该是4次呵,item1(*trans)和item2(accum)由于调用复制构造函数,产生了两个形参副本。return之后,函数fcn()两个局部对象item1, item2分别析构,两个形参副本在这之前分别析构。 但是,答案说是3次,accum形参,item1和item2分别析构。不知道怎么理解item1(*trans)这里是否需要复制构造? --
billzheng
billzheng
你应该把你自己的理解贴出来的,我们帮你审查。
返回顶部
顶部