有效地分配堆栈对象(由函数的值返回)到堆?
Allocate stack object (returned by value from function) to heap efficiently?
我有一个对象Foo
函数makeFoo()
的值返回,我需要通过指针FooHolder(Foo* foo)
将它的所有权传递给另一个对象。
我当前的解决方案是通过将堆栈上的Foo
对象传递给具有 move 语义的Foo
构造函数来创建Foo
堆对象:
Foo foo = makeFoo(...);
Foo* fooPtr = new Foo(std::move(foo));
fooHolder.set_value(fooPtr);
,但我希望有一个更有效的解决方案可以避免堆栈分配和复制。
注意 我无法创建返回指针的makeFoo
函数,因为调用是外部 API。
将代码编写为
Foo* fooPtr = new Foo(makeFoo(...));
fooHolder.set_value(fooPtr);
从 C++17 开始,makeFoo
的返回值直接在堆位置构造,这完全避免了临时对象。
相关文章:
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 从 c 或 cpp 系列子函数返回到主函数
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- 删除字符串后C++检测到堆损坏
- 如何在 C++ 中返回到上一步
- 类函数返回到另一个类函数返回打印不同的值
- 如果类在堆上,函数是转到堆还是堆栈?
- 检测到堆损坏(字符串导致堆损坏)|C++
- 在C++中检测到堆损坏错误
- 有没有办法将 for 循环结果返回到像三元运算符这样的函数中?
- 如何将字符串从 C++/CLI 方法返回到调用它的非托管C++
- 是否是从等待返回到悬而未决的"this"实例的未定义行为?
- QT-如何通过按下按钮从子窗口小部件返回到父窗口小部件
- 无法将答案从矢量返回到整数
- 函数超过堆栈大小,请考虑将一些数据移动到堆 (C6262)
- 如何仅覆盖一个EXPECT_CALL的默认ON_CALL操作,并在以后返回到默认操作
- 返回到循环 c++
- 有效地分配堆栈对象(由函数的值返回)到堆?
- 为什么在c++中将指向对象的指针或引用返回到内存堆是一场灾难