2016-07-18 19 views
2

i getestet einige neue Funktionen von C++ 14 und ich fragte mich, warum diese Zeiger nicht die gleiche Adresse habenC++ Warum ist es nicht die gleiche Adresse (Zeiger)

#include <iostream> 
#include <memory> 

class Test 
{ 
public : 
    Test(){std::cout << "Constructor" << std::endl;} 
    Test(int val){value = val;} 
    ~Test(){std::cout << "Destructor" << std::endl;} 

private : 
    unsigned int value; 
}; 

int main(int argc, char *argv[]) 
{ 

    std::unique_ptr<Test> ptr(new Test(45)); 
    std::cout << &ptr << std::endl; 

    std::unique_ptr<Test> ptr2 (std::move(ptr)); 
    std::cout << &ptr2 << std::endl; 

     return 0; 
} 


Output : 
    0xffffcbb0 
    0xffffcba0 //Why it's not the same as previous 
    Destructor 

Danke :) und einen guten Tag haben

+3

FWIW, dies ist C++ 11-Code. In C++ 14 gibt es nichts Besonderes. – chris

+4

Sie verschieben niemals die Adresse von Variablen. Sie verschieben ihre Werte. – xinaiz

Antwort

16

Sie drucken die Adressen der unique_ptr Variablen selbst aus, nicht die Adressen, auf die sie zeigen. Verwenden Sie das unique_ptr::get() Methode anstelle der & Betreiber:

std::unique_ptr<Test> ptr(new Test(45)); 
std::cout << ptr.get() << std::endl; 

std::unique_ptr<Test> ptr2 (std::move(ptr)); 
std::cout << ptr2.get() << std::endl; 
+0

danke, aber wenn ich Ihren Code ausführen, ist die Adresse von ptr2 0 || ptr = 0x6000284d0, ptr2 = 0 –

+0

@AdamBrevet: Das funktioniert: https://ideone.com/6cBByH. Kannst du deinen Code zeigen? – Dani

+0

http://img11.hostingpics.net/pics/328618Capture.png –