您的位置:首页 > 其它

取消创建临时对象

2016-05-18 19:40 295 查看
         我们知道创建一个对象会调用构造函数来为该对象开辟内存空间,而销毁该对象则需要调用析构函数类释放内存,

每一次执行创建对象系统都有牺牲一定的速度和空间。而且我们要执行自加的只是对象的成员变量,那么为什么我们不

返回这个执行成员变量自加之后的对象呢?

        我们知道this指针就是对象的标签,而某个对象的成员变量也会被编译器自动贴上标签(this指针)证明是某个对象的,

那么我们只要将成员变量自加,然后再返回该成员变量的标签,也就是this指针即可。

          (this 指针就是对象的标签,返回某个对象可以返回该对象的this指针)。

     //返回指向当前对象的标签,其例程如下:

#include <iostream>

using namespace std;

class num 

{

public:

    num(){n=1;cout<<"构造函数执行\n";}

    num(const num &s){this->n=s.n;cout<<"复制构造函数执行\n";}

    num(int i){n=i;cout<<"构造函数执行\n";}

    ~num(){cout<<"析构函数执行\n";}

    int get()const{return n;}

    void set(int x){n=x;}

    void add(){n++;}

     num& operator++()

    {

    ++n;

    return *this;

    }

private:

    int n;

};

int main()

{

    num i;

    cout<<"i:"<<i.get()<<endl;

    num x=++i; //因为是构造对象并用另一个对象对它进行初始化,
          //因此右侧即使按别名返回对象,也会调用复制构造函数。

    cout<<"i:"<<i.get()<<endl;
cout<<"x:"<<x.get()<<endl;
i=++i;       //调用赋值运算符函数"="进行赋值,
            //右侧按别名返回对象不会调用复制构造函数,
//按值返回对象则会调用复制构造函数

    return 0;

}

需要注意:const      num& operator++()

      为了避免返回值返回时创建一个*this的临时副本,我们最好将operator++()的返回值定义为按照别名返回。

     最好将其返回值定义为常量。

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: