C++:通过引用 unique_ptr 对象使 unique_ptr 为空

Posted

技术标签:

【中文标题】C++:通过引用 unique_ptr 对象使 unique_ptr 为空【英文标题】:C++: make unique_ptr null by reference to unique_ptr object 【发布时间】:2021-05-12 10:52:26 【问题描述】:

这可能是一个愚蠢的问题,但我可以通过引用 unique_ptr 对象来使 unique_ptr 为空吗?

#include<iostream>
#include<memory>

int main() 

    std::unique_ptr<int> a = std::make_unique<int>(2);
    int& b = *a.get();
    
    // use "b" to make "a" nullptr

    return 0;

【问题讨论】:

没有愚蠢的问题。有些问题可以从一些澄清中受益;)。为什么你认为你需要这样做? b 不“知道”指针,这是不可能的。 仅供参考,不是对 unique_ptr 对象的引用;它是一个 unique_ptr 对 指向 的对象的引用(它本身就是一个对象,但不是固定到所示引用的对象)。 没有办法以这种方式使用b。您要解决的真正问题是什么?不,不是以这种方式使现有的unique_ptr 为空,而是您认为这是解决方案的那个,所以这就是您要问的问题。也许如果你解释你真正的问题是什么,不同的解决方案就会变得显而易见。 不确定你真正想要做什么,但要“使unique_ptr为空”,你可以使用a.release()。你必须确保你最终删除了释放的指针,否则你会泄漏内存。 OT:您可以只写int&amp; b = *a; 而不是使用*a.get() 【参考方案1】:

没有。没有办法做到这一点。 int 只是一个int,对int 的引用只是对int 的引用。它不知道保存其地址的指针。

【讨论】:

以上是关于C++:通过引用 unique_ptr 对象使 unique_ptr 为空的主要内容,如果未能解决你的问题,请参考以下文章

深入了解C++ (15) | 源码分析auto_ptr & unique_ptr 设计

C++ 11 创建和使用 unique_ptr

使用类型转换在 unique_ptr 中创建对对象的引用

c++新特性11 (10)shared_ptr六”构造函数unique_ptr参数“

在 C++ 中返回假对象引用的规则

如何使 Python 模拟从基类派生?