gpt4 book ai didi

C++ 将 const 存储到临时对象

转载 作者:行者123 更新时间:2023-11-28 01:39:47 26 4
gpt4 key购买 nike

<分区>

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

#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 使用它之前就死了。我认为如果有 const& 临时 object 的生命周期会延长。将 giveme() 的返回分配给函数 main 中的本地 const& 解决了这个问题。然后临时文件一直存在到 main 范围的末尾。那么这里发生了什么???

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com