p18-function-like-class


临时函数

#include<iostream>

class temporary{
public:
    temporary(){
            std::cout << "temporary ctor" <<std::endl;
    }
    ~temporary(){
        std::cout << "destory"  <<std::endl;
    }
    void fun(){
        std::cout << "This is function output"  <<std::endl;
    }

};
int main(){
    
    temporary ().fun();
    return 0;
}

output:

temporary ctor
This is function output
destory
  • 建立一个没有命名的非堆(non-heap)对象,也就是无名对象时,会产生临时对象
Integer inte= Integer(5); //用无名临时对象初始化一个对象
  • 构造函数作为隐式类型转换函数时,会创建临时对象,用作实参传递给函数。
class Integer
{
public:
    Integer(int i):m_val(i){}
    ~Integer(){}
private:
    int m_val;
};
 
void testFunc(Integer itgr)
{
    //do something
}

int  i = 10;
testFunc(i);

会产生一个临时对象,作为实参传递到 testFunc 函数中。
  • 函数返回一个对象时,会产生临时对象。以返回的对象作为拷贝构造函数的实参构造一个临时对象。
Integer Func()
{
    Integer itgr;
    return itgr;
}
 
int main()
{
    Integer in;
    in = Func();
}

Why we need function-like class?

  • 让类实例化之后的对象可以作为一个参数进行传递(可以随时修改这个类,但是不影响其他类或者函数)

  • 标准库中存在很多仿函数,并且会继承很多奇特的base classes

Author: Moule Lin
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Moule Lin !
  TOC