作为参考,在作用域后std :: unique_ptr是否会自动清除?

问题描述 投票:3回答:1

可以使用一个函数的指针返回,这出于很多原因很有用,但是建议从该返回值中获取引用吗?

#include <iostream>
#include <memory>

using namespace std;

unique_ptr<int> give_a_number(){
    return std::make_unique<int>(6);
}

int main(){
   int& ret = *give_a_number();
   return ret;
}

根据消毒剂,没有泄漏发生:

user@comp: Scrapbook$ g++ main.cpp -fsanitize=address -g
user@comp: Scrapbook$ 

所以该引用以某种方式被清除,但是我不明白为什么。清理是如何进行的,甚至unque_ptr如何能够跟踪数据。应该认为这是安全行为吗?这是社区中公认的用法吗?

c++ reference smart-pointers
1个回答
2
投票

这里没有泄漏,但是您的程序有未定义的行为。

give_a_number()按值返回拥有std::unique_ptr对象的int。因此,此std::unique_ptr在语句中被实现为临时对象

© www.soinside.com 2019 - 2024. All rights reserved.