gpt4 book ai didi

c++ - 在 C++ 中有效地传递和返回对象

转载 作者:行者123 更新时间:2023-11-30 00:58:42 25 4
gpt4 key购买 nike

我有一个 Visual Studio 2008 C++ 应用程序,其中一个函数 Foo::CreateBar使用内部函数用一些数据填充缓冲区,如下所示。据我了解,VS2008 将使用返回值优化 (RVO) 来确保 Foo::GetData()调用不会产生拷贝,但我会产生 Bar 的拷贝吗?构造函数?返回 Bar 怎么样?来自 Foo::CreateBar 的对象有没有更有效的方法来做到这一点?我需要重新定义我的 Buffer 吗?作为boost::shared_ptr< std::vector< BYTE > >

typedef std::vector< BYTE > Buffer;

class Bar
{
public:
explicit Bar( Buffer buffer ) : buffer_( buffer ) { };

// ...

private:
Buffer buffer_;
};

class Foo
{
public:
Bar CreateBar() const { return Bar( GetData() ); };

// ...

private:

static Buffer GetData()
{
Buffer buffer;
// populate the buffer...
return buffer;
};
};

谢谢,保罗H

最佳答案

您可以通过检查为此源代码生成的汇编代码来确定地回答这个问题 - 修改编译器输出选项以生成与源代码交错的列表。

shared_ptr 在任何情况下都是不合适的。这是程序员有效管理需要共享对象的设计的一种手段,而不是欺骗编译器不构造超出其应有数量的对象。

关于c++ - 在 C++ 中有效地传递和返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5782225/

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