小编Isa*_*aev的帖子

手写动作

我写了一个向量类来学习移动语义。我使用移动构造函数来移动 T(注释行)。

我的问题是为什么不像在 C 中一样复制临时对象的所有字节并将临时对象的所有字节设置为零?

我知道会为临时对象调用析构函数,它可能需要一些初始化的成员才能正确析构。这就是为什么我不能改变对象的内部表示的原因。

但如果我 100% 确定我的 ~T() 没有这样的要求,这是一个很好的优化吗?

 20     void push_back(T&& val)
 21     {
 22         check_cap();
 23         //new (m_data + m_size) T(std::move(val));
 24         for(int i = 0; i < sizeof(T); ++i)
 25         {
 26             reinterpret_cast<char*> (m_data + m_size)[i] = reinterpret_cast<char*> (&val)[i];
 27             reinterpret_cast<char*> (&val)[i] = 0;
 28         }
 29         m_size++;
 30     }
Run Code Online (Sandbox Code Playgroud)

(如果与实际问题无关,请不要谈论演员表及其安全性)

(我知道这不是一个好方法,最好不要在实际项目中使用它。但我只感兴趣从效率的角度来看它有多好。)

c++ memcpy move-semantics c++11

2
推荐指数
1
解决办法
138
查看次数

标签 统计

c++ ×1

c++11 ×1

memcpy ×1

move-semantics ×1