我创建了很多次我在代码中的很多地方都使用了类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/