有效地分配堆栈对象(由函数的值返回)到堆?

Allocate stack object (returned by value from function) to heap efficiently?

本文关键字:返回 到堆 函数 堆栈 分配 对象 有效地      更新时间:2023-10-16

我有一个对象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的返回值直接在堆位置构造,这完全避免了临时对象。