2017-03-02 2 views
0

Ich implementiere Move Construct/Assign-Operationen für ein Objekt, das auf einige Daten auf dem Heap zeigt.Force Test des Move Konstruktors?

Ich teste move construct/assign und kopiere construct/assign, alles baut und alles funktioniert außer move construct. (Move-Zuweisung funktioniert).

Ich kann nicht scheinen, den Debugger zu stolpern, der Move-Konstruktor-Code wird nicht erreicht.

Ich bin sicher, es gibt etwas einfaches, das ich vermisse?

Der Umzug Konstruktor ...

//... 

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; 
} 

//... 

Die Testfunktion ...

ado::HeapBuffer<2048> makeHeapBuffer2048() // test move semantics 
{ 
    ado::HeapBuffer<2048> hb2048; 
    hb2048[777] = 123.0f; 
    return hb2048; 
} 

Die Berufung Test ...

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); 
} 

Ich will hinzufügen, dass, wenn ich ändern der Move-Konstruktor zu ...

HeapBuffer (HeapBuffer&&) = delete; 

... der Build schlägt am erwarteten Punkt fehl (d. H. durch den Test gestolpert).

+1

elision sollte tritt wahrscheinlich – Jarod42

+1

Suche nach "C++ elision kopieren". – nwp

Antwort

3

elision sollte wahrscheinlich auftritt, können Sie versuchen:

ado::HeapBuffer<2048> moved; 
moved[777] = 123.0f; 
ado::HeapBuffer<2048> hb{std::move(moved)}; 

expectEquals (hb[777], 123.0f); 
+0

Perfect thanks, ich habe 'moved [777] = 123.0f' hinzugefügt, damit die assertion expectEquals() funktioniert. – ternonlerwen

Verwandte Themen