gpt4 book ai didi

c++ - 关于C++0x中右值的问题

转载 作者:行者123 更新时间:2023-11-30 03:10:27 27 4
gpt4 key购买 nike

我创建了很多次我在代码中的很多地方都使用了类DataBuffer,所以它应该是快速和轻量级的。此外,我使用各种缓冲区大小,因此为了减少内存分配,我编写了这样的模板:

template<unsigned int T_buffer_size> class DataBuffer
{
public:
DataBuffer (const unsigned int &buffer_size);

char buffer [T_buffer_size];
const unsigned int buffer_size;
};

问题是,我必须多次复制 DataBuffer 对象。这就是为什么我想知道移动构造函数是否可以在这里提供帮助。有没有一种简单的方法可以在对象之间移动我的“缓冲区”数组?

实现这个类很容易:

class DataBuffer
{
public:
DataBuffer (const unsigned int &buffer_size);

char *buffer;
const unsigned int buffer_size;
};

但是因为“缓冲区”是一个常规指针,所以需要更多时间来访问存储在其中的数据...

最佳答案

Is there an easy way to move my 'buffer' array between objects* (char buffer [T_buffer_size];)?

,你必须复制(虽然你可以安全地使用memcpy(...),它非常快)因为它分配在堆栈上,而不是指针。只有在堆上分配的指针/对象才能利用右值优化。

更新:查看代码,可以改写为:

template<unsigned int T_buffer_size> class DataBuffer
{
public:
DataBuffer ();
char buffer [T_buffer_size];
};

关于c++ - 关于C++0x中右值的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3113962/

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