`
kmplayer
  • 浏览: 508983 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款31:千万不要传回"函数内局部对象的引用"或"函数内以new获得的指针所指的对象"

 
阅读更多
1,函数内局部对象的引用
局部对象离开函数的作用域被自动析构,则它的引用不再指向一个有效对象,结果无法预测.
2,函数内以new获得的指针所指的对象
这样做的话,每次都要手动delete分配的内存.
几乎就是坐等内存泄露(memory leak)的发生.
例如:
friend const Rational& operator*(const Rational& lhs,const Rational& rhs)
{
    Rational temp( lhs.n*rhs.n,rhs.d*rhs.d );
    return temp;
}

Rational one(1),two(2),three(3);
Rational product=one*two*three;
//注意:每次调用operator*传回的对象都需要被删除掉
//唯一的解决办法:
const Rational& temp1=one*two;
const Rational& temp2=temp1*three;
delete &temp1;
delete &temp2;

分享到:
评论

相关推荐

    C语言函数集 chm格式双色版

    4. **函数指针**:函数指针是一种特殊的指针类型,可以存储函数的地址,使得函数可以作为参数传递,或者被其他函数返回。 5. **递归函数**:函数能够调用自身,这就是递归。在解决某些问题时,递归可以简化代码,但...

    CC程序设计函数PPT课件.pptx

    函数调用时,首先要在调用函数的范围内声明被调函数的类型,除非是整型或字符型函数,或者被调函数在主调函数之前定义,或者已经在全局范围内声明过。调用函数时,实参和形参需要在数量和类型上一一对应。对于非`...

    c程序设计第四版函数源码

    在这一版本中,可能涉及了函数的创建、参数传递、返回值、局部变量、全局变量以及函数指针等核心概念。 首先,我们来深入理解函数调用。在C语言中,函数调用是通过函数名后跟括号来完成的,括号内可以放置传递给该...

    strtod函数

    strtod 函数 strtod 函数是一个将字符串转换成浮点数的函数,它的定义在 stdlib.h 头文件中。该函数的原型为 `double strtod(const char *nptr, char endptr);`。 strtod 函数的作用是将字符串 nptr 转换成浮点数...

    C语言中函数的参数传递.pdf

    形参与实参指向同一内存地址,通过形参指针修改的数据直接作用于实参指针所指向的对象,从而实现对实参值的修改。传址方式允许函数内部操作影响到实际的变量,适用于需要修改实参值或者处理大尺寸数据结构的场景。 ...

    嵌入式C语言培训-C编程基础-函数返回值

    函数指针存储了函数的地址,可以通过函数指针调用函数,这在处理回调函数和算法比较等方面非常有用。 8. **递归函数** 递归函数是一种调用自身的函数,通常用于解决分治策略的问题。递归函数必须有一个明确的退出...

    C#中用委托实现C++的回调函数

    在C++中,回调函数通常通过函数指针或函数对象来实现,而在C#中,我们可以使用委托来达到类似的效果。本文将探讨如何在C#中使用委托实现C++的回调函数,并结合VS2015和VS2019环境,讨论如何处理UDP快速通信中的数据...

    PHP 面向对象技术(全面讲解).txt

    个指针指向堆里面的对象,所以我们可以通过$p1 这个引用变量来操作对象,通常我们也称对象引用 为对象。 6.如何去使用对象中的成员 上面看到PHP 对象中的成员有两种一种是成员属性,一种是成员方法。对象我们以经可以...

    c语言指针题目.pdf

    解释:函数指针p的定义语句为void (*p)(int*, int*),表示p是一个函数指针,指向一个函数,该函数的参数为两个整型指针。 3. 下列程序的输出结果是什么?答案:100 解释:函数fun的参数为一个整型指针n,函数体中...

    2012年全国(各省通用)计算机二级C语言机考题库归纳.pdf

    - 指针:`*n` 表示解引用操作,获取指针所指向的值;`n = n / 10` 对指针指向的变量进行除法运算。 - 形参与实参:形参`n`在函数内部可以被修改,通过指针传回调用者。 3. 数学逻辑 - 数位处理:在函数`fun`中,...

    Matlab调用C语言函数.pdf

    - 在 `mexFunction` 中,你需要使用 `mxCreateDoubleMatrix` 创建一个 mxArray 对象,以存放返回值,并使用 `mxGetPr` 获取或设置 mxArray 中的双精度浮点数。 4. **编译 MEX 文件**: 为了将 C 代码编译成 MEX ...

    C语言中的指针及其应用.pdf

    例如,可以通过指针参数将多个计算结果传回主调函数。 指针的使用虽然灵活,但也存在潜在的风险。比如,指针未经初始化就使用,或者使用已经被释放的指针,都可能导致程序崩溃或者不可预料的结果。因此,正确地管理...

    atoi,atol,strtod,strtol,strtoul实现类型转换.doc

    若转换成功,转换后的字符串会放在参数buf指针所指的空间。 例如: ```c #include int main() { double a = 123.45; double b = -1234.56; char *ptr; int decpt, sign; gcvt(a, 5, ptr); printf("a value=...

    [PHP]实用函数4

    #### 31. `strtotime()` - **功能**:把表示日期和时间的字符串转化成时间戳。 - **语法**:`int strtotime(string $time, int $now = time())` - **用途**:解析各种日期格式的字符串,并转换为时间戳。 #### 32. ...

    C语言中的字符串数组和字符串指针.pdf

    在C语言中,字符串数组和字符串指针是处理字符串的两种常用方法,它们在定义、引用、数据空间、存储单元分配和赋值方面各有特点和区别。 首先,字符串数组是由多个字符型元素构成的集合,它在内存中占据连续的存储...

    C++编程中将引用类型作为函数参数的方法指南

    C++之所以增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能。 到目前为止我们介绍过函数参数传递的两种情况。 1) 将变量名作为实参和形参 这时传给形参的是变量的值,传递是单向的。如果在执行函数...

    C语言须知提问

    C语言不支持函数重载,即在同一作用域内不能有两个同名函数但参数类型或个数不同的函数。如果需要实现类似的功能,可以通过定义多个不同名称的函数来实现。 #### 27. 函数的递归 递归是一种函数调用自身的编程技巧...

    C++语言程序设计(上)03

    多态是指同一种行为在不同对象上有不同的表现形式,通过虚函数和纯虚函数实现。 8. **模板与泛型编程**:C++的模板功能允许我们编写泛化的代码,不论是函数模板还是类模板,都能在编译时自动生成针对不同数据类型的...

    c++中vector的用法详解.doc.pdf

    6. `end()`函数可以得到数组的最后一个单元+1的指针。 7. `front()`函数可以得到数组头的引用。 8. `back()`函数可以得到数组的最后一个单元的引用。 9. `max_size()`函数可以得到vector最大可以是多大。 10. `...

    c++中vector的用法详解.docx

    使用 `end` 函数得到数组的最后一个单元+1 的指针;使用 `front` 函数得到数组头的引用;使用 `back` 函数得到数组的最后一个单元的引用;使用 `max_size` 函数得到 vector 最大可以是多大;使用 `capacity` 函数...

Global site tag (gtag.js) - Google Analytics