如果我忽略了shared_ptr返回类型的函数的返回值怎么办

陈培鸿
#include <iostream>
#include <memory>

using namespace std;

shared_ptr<string> func()
{
    shared_ptr<string> ptr = make_shared<string>("smart poiter");
    return ptr;
}

int main(int argc, char const *argv[])
{
    func();
    cout << "pause" << endl;
    return 0;
}

像上面的代码一样,字符串“ smart poiter”的内存会被释放吗?

暗影游侠

是。shared_ptr在这里并不特殊;如果实例未分配而返回,则任何实例的析构函数都将被立即调用(当语句完成评估时);不这样做会严重破坏RAII。shared_ptr的析构函数减少引用计数,没有其他实例拥有引用,因此析构函数将释放关联的内存。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java,如果我想从函数返回不同的类型怎么办?

Kotlin:返回泛型类型的函数。如果我不知道应该返回哪种具体类型该怎么办?

如果Spring MVC控制器方法不返回值,该怎么办?

异步函数不返回值,但是console.log()可以:怎么办?

如何处理参数与返回值紧密相关的方法。如果参数为空怎么办?爪哇

RESTful API:无返回值时该怎么办

从函数返回已取消引用的shared_ptr值

如果我不关心返回值,应该使用哪种返回类型声明函数?

如果isAvailableForServiceType方法返回NO,该怎么办

如果block_given怎么办?返回假?

如果“ echo $”怎么办?命令返回2?

INSERT INTO with SELECT .... 如果 SELECT 返回 0 行怎么办

TypeScript:库函数的返回类型未知时该怎么办

如果函数应用程序是类型类怎么办?

如果我需要获取混合类型的列怎么办?

如果我不调用close(fd)函数怎么办?

我的SQL返回空结果集,怎么办?

findViewById()返回null-我该怎么办?

我的ajax调用总是返回错误,该怎么办

收到Alamofire的返回数据后,我该怎么办?

返回右值的 shared_ptr 成员

尽管映射始终是引用类型,但是如果它们是从非指针接收器返回的,该怎么办?

如果<iostream>函数失败怎么办?

忽略PL / SQL函数的返回值

忽略返回值的过程/函数VHDL

我在RStudio中使用ifelse is.na滞后函数怎么办?无法返回以下正确的0和1

如果我希望stream_iterator不忽略空格怎么办

如果我不将函数的返回值保存在变量中,该函数的返回值在哪里存储?

如果我们不从c ++中的非void返回类型的函数返回任何内容,返回值是多少?[实验性]