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

标签 c++ c++11

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

相关文章:

c++ - 类型注册后如何在 QML 信号处理程序中捕获 C++ 信号?

c++ - 用 fstream 在最后一行写

c++ - std::async 在 linux 上的 gcc 4.7 中被破坏了吗?

c++ - 有没有一种简单的方法可以转发到具有匹配函数签名的成员函数?

c++ - 在 OpenCV C++ 中将 RGB 彩色图像转换为索引彩色图像类型

c++ - 独立的 C++ 编译器

c++ - WaitCommEvent() 是否报告已经收到的数据?

C++使用存储在字符串中的函数名称获取函数指针或评估函数

c++ - 智能指针和数组

c++ - 函数指针的模板化转换函数