gpt4 book ai didi

c++ - 防止在返回时复制对象

转载 作者:行者123 更新时间:2023-12-03 07:07:06 27 4
gpt4 key购买 nike

我有这个:

struct Point
{
size_t x;
size_t y;
~Point()
{
std::cout << "Destro" << "\n";
}
};

const Point& getPoint()
{
return { 100, 120 };
}
int main()
{
Point p = getPoint();
std::cout << "Exit" << "\n";
}
结果是
Destro
Exit
Destro
我基本上是在尝试使 getPoint方法不必复制 Point类。
到目前为止,这是正在发生的事情:
  • Point创建的
  • 点已复制到结果
  • 点破坏了

  • 我怎样才能使Point只被销毁一次?

    最佳答案

    您需要按值而不是引用返回。使用

    Point getPoint()
    {
    return { 100, 120 };
    }
    允许C++ 17的 guaranteed copy elision踢进去,这导致 Point p = getPoint();像是 Point p{ 100, 120 };一样起作用

    注意:从不,从不,从不通过引用返回函数本地对象。该对象将在函数末尾销毁,留下悬挂的引用,并且使用该引用是未定义的行为。

    关于c++ - 防止在返回时复制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64671280/

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