我正在为指向堆上的某些数据的对象实现移动构造/赋值操作。
我正在测试移动构造/分配和复制构造/分配,所有构建和除移动构造之外的所有工作。 (移动分配确实有效)。
我似乎无法使调试器跳闸,移动构造函数代码未到达。
我确定我缺少一些简单的东西?
移动构造函数......
//...
HeapBuffer (HeapBuffer&& other) // move
: data {other.data},
size {other.size}
{
assert(false); // hmm can't seem to debug to here in testing :(
other.data = nullptr;
other.size = 0;
}
//...
测试功能......
ado::HeapBuffer<2048> makeHeapBuffer2048() // test move semantics
{
ado::HeapBuffer<2048> hb2048;
hb2048[777] = 123.0f;
return hb2048;
}
主叫测试...
beginTest ("HeapBuffer move constructor"); // hmmm can't seem to get to the move constructor,
// strange because all the others work!?!?
{
ado::HeapBuffer<2048> hb {makeHeapBuffer2048()};
expectEquals (hb[777], 123.0f);
}
如果我将移动构造函数更改为...
,我将添加HeapBuffer (HeapBuffer&&) = delete;
......构建在预期点失败(即通过测试跳闸)。
答案 0 :(得分:3)
ado::HeapBuffer<2048> moved;
moved[777] = 123.0f;
ado::HeapBuffer<2048> hb{std::move(moved)};
expectEquals (hb[777], 123.0f);