2016-07-18 95 views
2

我測試的C++ 14的一些新的功能,我不知道爲什麼這些指針不具有相同的地址C++爲什麼它是不一樣的地址(指針)

#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 

謝謝:)祝你有個愉快的日子

+3

FWIW,這是C++ 11的代碼。那裏沒有特定的C++ 14。 – chris

+4

你永遠不會移動變量的地址。你移動它們的值。 – xinaiz

回答

16

您正在打印出unique_ptr變量本身的地址,而不是它們指向的地址。使用unique_ptr::get()方法而不是操作者&

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

謝謝,但是當我執行你的代碼時,ptr2的地址是0 || ptr = 0x6000284d0, ptr2 = 0 –

+0

@AdamBrevet:這工作:https://ideone.com/6cBByH。你能顯示你的代碼嗎? – Dani

+0

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

相關問題