C++ 为什么不是同一个地址(指针)

C++ Why it's not the same address (pointers)

本文关键字:指针 地址 同一个 为什么不 C++      更新时间:2023-10-16

我测试了c++14的一些新函数,我想知道为什么这些指针没有相同的地址

#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

谢谢:)祝你今天愉快

您打印的是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;