2
回答
c++一段代码里面调用某个类的析构函数多少次?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

<无详细内容>

举报
peterli
发帖于5年前 2回/327阅

以下是问题补充:

  • @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; //... } (5年前)
共有2个答案 最后回答: 5年前
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; //...
 }


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