我查看了有关std :: unique_ptr的其他问题,但未能找到这个问题的清晰简洁的答案。
给出以下代码:
std::unique_ptr<someClass> a(new someClass);
someClass b;
*a = b;
第一行中堆分配的someClass是否已被泄露?是垃圾收集了吗?
我很欣赏这个代码在内存分配中究竟发生了什么。
答案 0 :(得分:1)
unique_ptr
只有在您 release
拥有的资源时才会泄漏,并且不会自行销毁它。
在您的情况下,为unique_ptr
调用a
的{{3}}并返回引用指针对象的左值。然后,您可以为该指针调用复制赋值运算符,但这不会影响它占用的内存管理。
堆对象的内存在a
定义范围的末尾发布。
答案 1 :(得分:-2)
编辑错误Unique_ptrs没有引用计数器。
只有当smartpointers的内部计数器为0时,您的unique_ptr才会被销毁。在这种情况下,它仍然是1。