gpt4 book ai didi

c++将相同的对象返回给调用者

转载 作者:太空宇宙 更新时间:2023-11-04 13:48:26 24 4
gpt4 key购买 nike

我有以下代码,

    ---file1.cpp---
file1::file1()
{
std::cout<<"Inside constructor \n";
}
file1::~file1()
{
std::cout<<"Inside destructor \n";
}


---file2.cpp---
//file2 is a singleton. There is a single object instance available at anytime.
file1 file2::cFunction()
{
file1 f1();
return f1;
}

----mainFile.cpp----
int main()
{
file2 o1;
file2 o2;
file1 obj1 = o1.cFunction();
file1 obj2 = o2.cFunction();
return 0;

}

头文件定义了 file1.h 和 file2.h 中的类(同样 file2 是一个单例),我已经根据需要包含了它们。(没有在这里复制那些东西)。

所以我的要求是这样的,当我调用 o1.cFunction() 时,它会创建一个 file1 对象并将其返回给 obj1(作为拷贝)。相反,我想要创建一个对象并将其返回给 obj1。

现在,o1.cFunction() 会打印,在 COnstructor 内部//来自 cFunction内部析构函数//来自cFunction内部析构函数//from main

我只需要调用一次析构函数。

最佳答案

允许编译器省略

f1的拷贝
file1 file2::cFunction()
{
file1 f1;
return f1;
}

这是一个允许的优化,而不是必需的行为。但是,该标准还指定,如果编译器选择在可能的情况下不执行复制省略,它必须首先将返回的值绑定(bind)到移动构造函数(即使它不是右值)。这将确保您至少获得 f1 的移动。换句话说,您拥有的代码已经完成了您希望它完成的工作。请注意,所有这些都是假设 C++11。它不适用于 C++03 或更早版本。

关于c++将相同的对象返回给调用者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24664227/

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