2016-07-18 43 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 –

相关问题