#include <iostream>

using namespace std;

// foo()函数本质上没什么问题,但建议你不要这样写代码
string &foo()
{
    string* str = new string("abc");
    return *str;
}
/*返回地址,不要返回指针
指针是局部变量,存储在栈上,函数结束后会被释放
但是指针所指的内存空间不会被释放掉,存在堆上,只有手动回收,或者在程序彻底退出时回收
*/

//引用实际上是变量的别名,是指针类型。楼主的代码在编译器看来,引用换成了指针,实际上foo应该是这样:
string* foo_ptr()
{
        string* str = new string("abc");
        return str;
}

int main()
{
    string & s1 = foo();
    cout << "s1:" << s1 << endl;
    delete &s1;             //抛开什么编程规范,到这里都没有任何毛病,
     //string s2 = foo();   //这样用foo()就必定会导致内存泄露

    // foo_ptr
    string* str_ptr=foo_ptr();
    delete str_ptr;

    ;
}

函数返回new对象的更多相关文章

  1. 关于C++函数返回局部对象的详细分析

    以前一直挺好奇的,C++是怎么在函数内返回一个局部对象的.因为按照我之前的想法,函数返回一个基本类型的值是通过存放到ecx实现的(关于浮点不了解),但是局部对象又是比较大的,很明显不能使用寄存器作为通 ...

  2. 【C++对象模型】函数返回C++对象的问题

    在深入C++对象模型中,对于形如 CObj obj1 = Get(obj2); 的形式,编译器会在将其改变为如下 Get(obj, CObj&  obj1); 将赋值操作符左边的变量作为函数的 ...

  3. 类1(this指针/const成员函数/类作用域/外部成员函数/返回this对象的函数)

    假设我们要设计一个包含以下操作的 Sales_data 类: 1.一个 isbn 成员函数,用于返回对象的 book_no 成员变量 2.一个 combine 成员函数,用于将一个 Sales_dat ...

  4. 【Vue】定义组件 data 必须是一个函数返回的对象

    Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter/setter,从而让 data 的属性能够响应数据变化.对象必须是纯粹的对象 (含有零个或多个的 key/value ...

  5. Python3基础 Python的函数都有返回值 无指定返回值的函数 返回NONE对象

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  6. django 视图函数返回queryset对象或日期对象至浏览器ajax接收的写法

    class MyDateTimeEncode(json.JSONEncoder): def default(self, o): if isinstance(o, datetime): return o ...

  7. python3中的range函数返回的是列表吗?

    注意,这里说的Python3里面的range函数,和Python2是不同的,返回的不是列表,是可迭代对象. 在python3中,如果执行下面的语句 print(range(10)) 得到结果是 ran ...

  8. C++函数返回值发生的对象复制

    最近用QT做一个监控系统的项目,需要显示目标的运动轨迹,每次目标移动后,就在目标的轨迹中(用vector记录)添加一条新轨迹. 但是在运行中画面里一直不出现轨迹,经过调试发现是记录轨迹的函数出错了. ...

  9. props default 数组/对象的默认值应当由一个工厂函数返回

    export default {props: { slides:{ type:Array, default:[] } },这是我的代码 报错是Invalid default value for pro ...

随机推荐

  1. bzoj 2480——扩展BSGS

    题意 给定 $a,b$ 和模数 $p$,求整数 $x$ 满足 $a^x \equiv  b(mod \ p)$,不保证 $a,p$ 互质. (好像是权限题,可见洛谷P4195 分析 之前讲过,可以通过 ...

  2. BasicAuth

    Go实现 在头里设置WWW-Authenticate 返回401 func (webhandler) ServeHTTP(writer http.ResponseWriter, request *ht ...

  3. Mybatis-Plus 3.0

    https://www.cnblogs.com/limn/p/9923170.html   代码生成器 https://blog.csdn.net/penker_zhao/article/detail ...

  4. redis系列(四):切换RDB备份到AOF备份

    1.准备环境 redis.conf服务端配置如下: daemonize yes port logfile /data//redis.log dir /data/ dbfilename dbmp.rdb ...

  5. Unity 绘制Mesh线条

    using UnityEngine; using System.Collections; using System.Collections.Generic;   public struct Segme ...

  6. fork()函数 图解

    code #include<stdio.h> #include <getopt.h> #include<iostream> #include<string&g ...

  7. 小程序弹框wx.showModal的使用

    if (!logined) { wx.showModal({ title: '提示', content: '您还没登录登录车掌柜, 是否前往登录', confirmText: '前往登录', conf ...

  8. BS4库详解

    from bs4 import BeautifulSoup html = """ <html><head><title>This is ...

  9. springcloud config自动刷新中文乱码问题

    摘录一段网上盛传的,如下: 在使用 spring cloud config 时,如果在 properties 文件里面有中文的话,会出现乱码. 乱码的原因是:spring 默认使用org.spring ...

  10. various system release [online]

    1. 金丝雀发布 Canary 简单的金丝雀测试一般通过手工测试验证,复杂的金丝雀测试需要比较完善的监控基础设施配合,通过监控指标反馈,观察金丝雀的健康状况,作为后续发布或回退的依据. 金丝雀发布,一 ...