0

最近我在一个项目中遇到了一个问题。那里的代码比下面的例子复杂得多,但我希望问题(如果有的话)是一样的。

#include <iostream>
class mObject
{
public:
    mObject(){ std::cout << "mObject ctor\n"; }
    mObject(const mObject& other){ std::cout << "mObject copy ctor\n"; }
    ~mObject(){ std::cout << "mObject dtor\n"; }
};

struct cFoo{
    cFoo(const mObject& obj):obj_(obj){}
    const mObject& get() { return obj_;}
    const mObject& obj_;
};

mObject giveme() { return mObject(); }
void func2(const mObject& p) { mObject g = p; }

int main()
{
    cFoo k(giveme());
    func2(k.get());
    return 0;
}

这给了我以下代码:

mObject ctor
mObject dtor
mObject copy ctor
mObject dtor

所以原来的“临时”mObject实例在使用它之前func2就死了。object我认为如果有的话,临时的寿命会延长const&。将返回分配giveme()给本地const&函数main解决了这个问题。然后临时生命直到main' 范围结束。那么这里发生了什么???

4

1 回答 1

2

在同一函数的同一作用域内,您可以通过将匿名临时对象绑定到const引用来延长其生命周期;为免生疑问,此行为在函数调用之间不具有传递性。

于 2017-12-08T09:04:58.303 回答