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

条款23:当你必须传回object时,不要尝试传回reference

阅读更多
1,首先:希望传回reference的目的是避免一次constructor.
注意:引用事一个既有对象的别名,任何时候看到引用都应该问自己,它的另外一个名称是什么.
2,给定下面一个实例:
#include <iostream>
using namespace std;

class Rational
{
public:
    Rational(int numerator=0,int denominator=1):n(numerator),d(denominator) {}
private:
    int n,d;

    friend const Rational operator*(const Rational& lhs,const Rational& rhs)
    {
        return Rational( lhs.n*rhs.n,rhs.d*rhs.d );
    }
};

int main()
{
    return 0;
}

(1)上述实例给出正确的方法,返回值是一个对象.

(2)第一种错误写法:
friend const Rational& operator*(const Rational& lhs,const Rational& rhs)
{
    Rational temp( lhs.n*rhs.n,rhs.d*rhs.d );
    return temp;
}

返回一个局部对象的引用.
另外还是付出了一个constructor的代价.

(3)第二种错误写法:
friend const Rational& operator*(const Rational& lhs,const Rational& rhs)
{
    Rational* p=new Rational( lhs.n*rhs.n,rhs.d*rhs.d );
    return *p;
}

仍然付出了一个constructor的代价,而且无法保证分配的堆内存delete,造成内存泄露.

(4)第三种错误写法:
friend const Rational& operator*(const Rational& lhs,const Rational& rhs)
{
    static Rational sR;
    ...
    return sR;
}

"..."处至少需要一个constructor.
而且还有一个问题:(a*b)==(c*d)将永远为真.
分享到:
评论

相关推荐

    java js图片上传回显

    当用户选择图片文件后,可以调用`FileReader`对象的`readAsDataURL()`方法,将图片文件转换为Data URL格式的字符串,然后设置到`&lt;img&gt;`标签的`src`属性,实现实时预览。 ```javascript function handleImageChange...

    Ajax JSON处理Servlet传回的值

    JSON(JavaScript Object Notation)是轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和生成,成为Ajax通信中常见的数据格式。Servlet是在Java平台上运行的服务器端程序,常用于处理HTTP请求。本...

    C#常用得函数.pdf

    * Eof():当抵达一个被开启的档案结尾时会传回 True。 * Filter(sourcearray, match[, include[, pare]]):搜寻字符串数组中的指定字符串,凡就是数组元素中含有指定字符串,会将它们结合成新字符串数组并传回。 * ...

    php函数功能速查表

    ada_afetch: 取得资料库的传回列。 ada_autocommit: 开关自动更动功能。 ada_close: 关闭 Adabas D 连结。 ada_commit: 更动 Adabas D 资料库。 ada_connect: 连结至 Adabas D 资料库。 ada_exec: 执行 SQL ...

    本地图片上传回显

    在IT行业中,本地图片上传回显是一个常见的功能需求,尤其在...综上所述,本地图片上传回显涉及前端与后端的交互,包括文件选择、预览、上传、安全验证和图片处理等多个环节,是构建富交互性Web应用的重要组成部分。

    数据如何从 ModalView 传回呈现者(利用委托对象)

    当用户触发ModalSegue时,呈现者会创建并显示ModalViewController。 为了从呈现者传递数据到ModalView,我们可以在ModalViewController的初始化方法或者在prepare(for:sender:)方法中设置ModalViewController的属性...

    多个Activity之间的交互(后一个传回前一个)

    当我们在一个应用中涉及到多个Activity时,通常需要在它们之间进行数据传递和交互,以便实现不同界面间的功能流转。本篇文章将深入探讨如何在Android中实现后一个Activity向前一个Activity传递数据并进行交互。 ...

    全面解析PHP常用函数.doc

    数组处理函数库是一个提供了 23 个函数的函数库,用于对数组进行操作。该函数库中的函数包括: * array: 建立一个新的数组 * array_walk: 让使用者自订函数能处理数组中的每一个元素 * arsort: 将数组的值由大到小...

    网页中实现树加载和弹出页面值传回主窗口

    当用户展开某个节点时,后台动态获取该节点下的子节点数据,并通过JavaScript动态渲染到页面上。例如,可以使用JSON格式的数据来表示树结构,通过Ajax请求获取这些数据,然后利用JavaScript库(如jQuery UI或...

    WINFORM 窗体间的传回值

    在这种模式下,一个主题对象维护着一系列观察者对象,当主题的状态发生改变时,会自动通知所有观察者,使它们能够做出相应的更新处理。这种模式非常适合于窗体间的数据传递场景,因为它允许我们在不同窗体之间共享...

    子窗体传值回主窗体显示

    当子窗体关闭时,触发事件,将数据传回给主窗体。 总的来说,这个程序展示了如何使用C#的委托和事件机制来实现主窗体与子窗体之间的通信。这是一种常见的设计模式,不仅适用于简单的值传递,还可以扩展到更复杂的...

    CORBA 程序设计指南(入门)-龙湘明

    - **定位对象**:客户端通过IOR(Object Reference)找到服务器对象,IOR包含服务器的地址和对象信息。 - **调用远程方法**:客户端通过ORB向服务器发送请求,ORB封装并转发该请求。 - **返回结果**:服务器执行请求...

    iOS Notification反向传值

    2. **发送通知**:在B界面中,当用户完成操作需要将数据传回A界面时,我们可以创建一个Notification,并使用`NotificationCenter.default.post(name:object:userInfo:)`方法发送。这里的`userInfo`参数可以携带我们...

    把弹出窗口中的某些值传回原来网页上

    当弹出窗口关闭时,`myVariable`就会包含弹出窗口的输入值,然后可以更新页面上的某个元素(如`id`为`displayArea`的元素)来展示这个值。 5. **使用layui**: 如果`layer`和`layui`是layui库,你可以使用其提供...

    FLEX常见问题总汇

    9. **乱码问题**:当你遇到后台(例如JSP)传回Flex的数据出现乱码时,可能需要确保请求参数使用正确的编码,例如`request.getParameter("name").getBytes("ISO8859-1")`转成`utf-8`,或者设置`request.setCharacter...

    android一个采集图像 并可以把预览回调传回数据做处理

    当需要保存图像或录制视频时,可以分别调用`Camera.takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback)`和`Camera.startRecording()`。这两个操作不会通过预览回调进行,而是有...

    C#中int、Convert、Parse、TryParse的区别对比.docx

    此外,object 到 int 的转换也需要注意,object 的值必须赋予 int 类型的值,否则会产生编译错误,而且 object 为 null 时也会出错。char 类型的转换也需要注意,返回的 ASCII 代码的值。 其次,int.Parse 方法可以...

    pytest-testlink:将测试结果上传回测试链接

    pytest-testlink 更新测试链接中的测试结果。...to pick from environment variable.build_name =Prefix $ to pick from environment variable.##pytest.ini 配置 testlink_ini_file=testlink.ini ###Testl

    mediasummon:将您的照片和视频传回给您

    将您的照片和视频传回给您 Mediasummon是一个开源应用程序,可获取您所有照片和视频的副本,并将其连续备份到计算机或云存储提供商上的一个有组织的目录中。 支持的媒体服务 Mediasummon可以连接到多个在线服务来...

Global site tag (gtag.js) - Google Analytics