美文网首页
(九)C++篇-千万不要返回局部对象的引用和指针

(九)C++篇-千万不要返回局部对象的引用和指针

作者: GoodTekken | 来源:发表于2022-06-19 22:08 被阅读0次

(1)千万不要返回局部对象的引用
当函数执行完毕时,将释放分配给局部对象的存储空间。此时,对局部对象的引用就会指向不确定的内存。考虑下面的程序:

// Disaster: Function returns a reference to a local object
const string &manip(const string& s)
{
    string ret = s;
    // transform ret in some way
    return ret; // Wrong: Returning reference to a local object!
}

这个函数会在运行时出错, 因为它返回了局部对象的引用。 当函数执行完毕,字符串 ret 占用的储存空间被释放,函数返回值指向了对于这个程序来说,不再有效的内存空间。

(2)千万不要返回局部对象的指针
函数的返回类型可以是大多数类型。特别地,函数也可以返回指针类型。和返回局部对象的引用一样, 返回指向局部对象的指针也是错误的。 一旦函数结束,局部对象被释放, 返回的指针就变成了指向不再存在的对象的悬垂指针。

(3)引用返回左值
返回引用的函数返回一个左值。因此,这样的函数可用于任何要求使用左值的地方:
测试代码如下:

#include <iostream>
#include <string>
using namespace std;

char &get_val(string &str, string::size_type ix)
{
    return str[ix];
}
int main()
{
    string s("a value");
    cout << s << endl;   // prints a value
    get_val(s, 0) = 'A'; // changes s[0] to A
    cout << s << endl;   // prints A value
    return 0;
}

输出结果:

tekken@tekken:~/C++WS$ ./a.out 
a value
A value

相关文章

  • (九)C++篇-千万不要返回局部对象的引用和指针

    (1)千万不要返回局部对象的引用当函数执行完毕时,将释放分配给局部对象的存储空间。此时,对局部对象的引用就会指向不...

  • c++ primer 阅读 day13

    不要返回局部对象的引用或指针 返回类累心的函数和调用运算符 引用返回左值 列表初始化返回值 主函数main的返回值...

  • 不要返回局部变量的引用或指针

    不要返回局部变量的引用或指针,因为函数返回时,局部变量会被释放,引用或指针指向的内容会失效。 例如以下程序 返回局...

  • 十四、Block之(六)Block的__block的内存管理

    一、强指针引用的block,内部引用OC对象的局部变量。 强指针引用的block,内部引用OC对象的局部变量,需要...

  • [陈宗权C++]C++第3天AMPM--构造器,析构,IO

    参考: 重点: 返回引用?不要返回局部变量的引用 对于常量对象,想修改成员变量,可以对成员对象用mutable来修...

  • C/C++ basis 01

    1. C和C++区别 2. 指针和引用 sizeof(引用)等于 引用指向对象的大小。 对比值传递,引用传递(引用...

  • 十五、Block之(七)Block的__block(修饰OC对象

    一、强指针引用的block,内部引用OC对象的局部变量(oc对象的变量)。 二、总结。

  • C++基础

    C++ 值传递、指针传递、引用传递详解C++中引用传递与指针传递区别 引用传递和指针传递的区别 引用的规则:(1)...

  • C++面试题目总结

    C++常考题目参考本 1、指针和引用的区别 实体与别名 内存分配,指针需要引用不需要 sizeof() 对象的大小...

  • Java四种引用简介

    引语: 我们知道java相比C,C++中没有令人头痛的指针,但是却有和指针作用相似的引用对象(Reference)...

网友评论

      本文标题:(九)C++篇-千万不要返回局部对象的引用和指针

      本文链接:https://www.haomeiwen.com/subject/akhdvrtx.html