我正在探索unique_ptr。我得到错误的答案比预期的,谁能帮助我找到到底是什么错了这里的代码.我在Windows机器上使用WSL(Windows System for Linux)。
#include <iostream>
#include <memory>
using namespace std;
int main()
{
auto revenu_ptr{make_unique<double>(1234.64)};
cout << "Revenue ptr---------" << endl;
cout << "Original " << &revenu_ptr << " " << *revenu_ptr<< endl;
auto revenue_ptr_move = std::move(revenu_ptr);
cout << "After Move " << &revenu_ptr << endl;
cout << "Revenue_ptr_move---------" << endl;
cout << "Moved Adderess " << &revenue_ptr_move<< endl;
cout << "Moved Value " << *revenue_ptr_move << endl;
}
Expected Output :
Revenue ptr---------
Original 0x7ffd442e9618 1234.64
After Move 0x0
Revenue_ptr_move---------
Moved Adderess 0x7ffd442e9618
Moved Value 1234.64
但是我得到了这个错误的输出,在移动操作后,adderss应该变为零,但它指向相同的内存位置。并且新地址位于revenue_ptr_move中
Revenue ptr---------
Original 0x7ffd442e9618 1234.64
After Move 0x7ffd442e9618
Revenue_ptr_move---------
Moved Adderess 0x7ffd442e9620
Moved Value 1234.64
1条答案
按热度按时间y53ybaqx1#
&revenu_ptr
是唯一ptr对象的地址。*revenu_ptr
是指向的数据。revenu_ptr.get()
是唯一ptr对象的值。您似乎混淆了
&revenu_ptr
和revenu_ptr.get()
。这不是一个罕见的问题。“指针的地址”与“指针的值”不同。而指针的值是 * 一个地址 * 这一事实增加了混乱!
最重要的是,指针指向的值与指针具有的值不同。
指针的值是一个地址。
指针的地址是一个地址。
指针指向的值有一个地址,它是指针的值。
这里我们有一个(唯一的)PTR,它指向值7。
它有一个地址--它自己存储的地址。它有一个值,这是它所指向的值7的地址。它有一个指向的值,这是一个值为7的整数。