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& b = *a;
而不是使用*a.get()
。
【参考方案1】:
没有。没有办法做到这一点。 int
只是一个int
,对int
的引用只是对int
的引用。它不知道保存其地址的指针。
【讨论】:
以上是关于C++:通过引用 unique_ptr 对象使 unique_ptr 为空的主要内容,如果未能解决你的问题,请参考以下文章
深入了解C++ (15) | 源码分析auto_ptr & unique_ptr 设计