可以使用一个函数的指针返回,这出于很多原因很有用,但是建议从该返回值中获取引用吗?
#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如何能够跟踪数据。应该认为这是安全行为吗?这是社区中公认的用法吗?
这里没有泄漏,但是您的程序有未定义的行为。
give_a_number()
按值返回拥有std::unique_ptr
对象的int
。因此,此std::unique_ptr
在语句中被实现为临时对象