【问题标题】:when did the temporary object created by implicit class-type conversion through constructers get destroyed通过构造函数隐式类类型转换创建的临时对象什么时候被销毁
【发布时间】:2015-12-25 08:38:03
【问题描述】:

为了使描述更具体,请参见以下来自 C++ Primer 4th edition 的代码:

class Sales_item {
public:
    Sales_item(const std::string &book = "")
      : isbn(book), units_sold(0), revenue(0.0) {}
    Sales_item(std::istream &is);
    //as before
} 

Sales_item item;
item.same_isbn(cin);

书上说这段代码通过使用构造函数将cin隐式转换为Sales_item,构造函数创建一个(临时的)Sales_item对象通过读取标准输入。

那么,临时对象什么时候被销毁,在这种情况下使用隐式转换是否有害?

【问题讨论】:

  • 离开Sales_item::same_isbn后的某个时间点。如果没有记错的话,C++ 标准对于确切的时刻有点模糊。除非您将对该对象的引用存储在 same_isbn 中(无论如何您都不应该这样做),否则没有问题。
  • 取决于函数是否采用对象或引用。如果它需要引用,则临时对象至少会持续到 same_isbn 的执行结束。
  • same_isbn 是什么?您的代码示例应显示此

标签: c++ constructor temporary-objects


【解决方案1】:

一旦创建临时对象的完整表达式完成执行。在您的情况下,它是在完成最后一行之后。通常它是无害的,除非您试图保存对临时对象的指针/引用。

【讨论】:

  • 感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2023-03-21
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多