小编amo*_*ont的帖子

为什么 std::unique_ptr 的 get() 获取的原始指针无法删除对象以及它是如何实现的

正如下面的代码所示,我尝试通过从 unique_ptr 获取的原始指针来删除该对象。但是,正如输出所示,编译器报告了错误。然而,对于原始指针,我们可以这样做int *p1 = new int{100}; int* p2 = p1; delete p2;

此外,我认为 unique_ptr 通过移动语义来维持其所有权。由于unique_ptr的get()函数返回的是原始指针,那么unique_ptr如何仍然拥有该对象的所有权呢?同时,为什么原始指针没有获得所有权。同时,我很困惑这是如何实现的。谢谢。

#include <iostream>
#include <memory>

int main(int argc, char const *argv[])
{
    std::unique_ptr<int> newPtr = std::make_unique<int>(1234);
    std::cout << *newPtr << std::endl;
    int* rawInt = newPtr.get();
    *rawInt = 200;
    delete rawInt;
    rawInt = nullptr;
    std::cout << *newPtr << std::endl; 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该代码在 MacO 上执行,输出为:

输出

c++ smart-pointers unique-ptr

1
推荐指数
1
解决办法
1486
查看次数

标签 统计

c++ ×1

smart-pointers ×1

unique-ptr ×1