gpt4 book ai didi

C++ 对象构造函数通过 const 引用复制传递

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:16:21 24 4
gpt4 key购买 nike

当我将一个对象作为 const 引用传递给另一个对象时,是否生成了一个拷贝?自从我通过引用传入对象以来,我一直假设成员对象本身实际上是我传入的对象,而不是拷贝。我制作了一个测试程序,导致传入的引用对象在范围末尾被销毁,但它并没有像我预期的那样崩溃。这是等待发生的错误还是正在复制对象?

#include <iostream>
#include <string>

class Something
{
public:
Something(const std::string& str) : mStr(str) {}
const std::string& str() const
{
return mStr;
}
private:
std::string mStr;
};

int main()
{
Something* something;
{
std::string temp = "Testing.";
something = new Something(temp);
}

std::cout<<something->str()<<"\n";
delete something;
return 0;
}

那个 std::string 仍然有效还是被删除了? (在对象本身)

最佳答案

数据成员 mStrstd::string 类型(它是一个对象,而不是引用)。

因此,当您在构造函数的初始化列表中初始化它时(通过 : mStr(str)),通过引用传递的参数将被复制。在您的示例中,只有初始化会导致生成拷贝:如果您删除了初始化,则不会生成任何拷贝。

关于C++ 对象构造函数通过 const 引用复制传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11377811/

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