下面是一段c++代码,你能知道运行的结果吗?
#include<iostream>
using namespace std;
class cpp_obj
{
public:
cpp_obj()
{
cout<<"ctor\n";
}
cpp_obj(const cpp_obj& c)
{
cout<<"copy ctor\n";
}
cpp_obj& operator=(const cpp_obj& rhs)
{
cout<<"operator=\n";
return *this;
}
~cpp_obj()
{
cout<<"dtor\n";
}
};
cpp_obj return_test()
{
cpp_obj b;
cout<<"before return\n";
return b;
}
int main()
{
cpp_obj n;
n=return_test();
system("Pause");
return 0;
}
结果是:
ctor
ctor
before return
dtor
operator=
dtor
dtor
简单分析,这里困惑的主要是copy ctor。因为在return b的时候,函数会将临时对象b拷贝给在main当中的一个隐藏的对象,假设是temp,temp的地址&temp是return_test()的隐藏参数。然后用对象temp赋值给n,结束后会释放temp,所以在打印出operator=之后出现dtor,最后一个dtor是对象n的。
分享到:
相关推荐
Oracle自定义函数返回一张表。主要用于生成一张等时间间隔的表数据。
Javascript函数与对象
指针 函数指针 (全局函数/类成员函数)和函数对象
即用即查——ASP+VBScript函数与对象参考手册
虚函数 面向对象 实验报告
在C中如何使函数返回数组收藏 Java语言的函数可以轻易的返回一个数组,而C/C++却不能直接返回一个数组。这是由于在C/C++中,数组不是一种类型,因此不能被直接返回。 在C/C++中,一般有两种方法来返回一个数组。
讲解函数对象
即用即查——JSP函数与对象参考手册 即用即查——JSP函数与对象参考手册
C++函数对象的定义及使用。包含了函数对象类的定义,函数对象的定义,其中重载的函数调用运算符的重载的使用。
因为要返回表对象,无论后续用什么方法返回,都先要声明全局type;并且,字段变量类型要为object,不能为record: create or replace type t_test as object( EMPNO NUMBER(4), ENAME VARCHAR2(10), JOB ...
Qt中调用函数如何返回多个值的Qt文件,详情可参考:https://blog.csdn.net/didi_ya/article/details/119854553
在每个对象上,这个事件处理函数只会被执行一次。其他规则与bind()函数相同。这个事件处理函数会接收到一个事件对象,可以通过它来阻止...如果既想取消默认的行为,又想阻止事件起泡,这个事件处理函数必须返回false。
数据结构 C++ 详细注释 返回指针 返回结构类型的函数 返回结构引用的函数.
C++中如何定义函数对象?尽管函数指针被广泛用于实现函数回调,但C++还提供了一个重要的实现回调函数的方法,那就是函数对象。今天达内C++培训的老师同大家分享C++中如何定义函数对象?
对象作为函数参数 对象本身做参数(传值),传对象副本 对象引用做参数(传地址),传对象本身
pb在数据窗口的祖先对象中编写行选择函数;pb在数据窗口的祖先对象中编写行选择函数;pb在数据窗口的祖先对象中编写行选择函数;pb在数据窗口的祖先对象中编写行选择函数;pb在数据窗口的祖先对象中编写行选择函数;pb在...
Abs 函数 返回数的绝对值。 And 运算符 执行两个表达式的逻辑连接。 Array 函数 返回含一数组的 变体 。 Asc 函数 返回字符串首字母的 ANSI 字符代码。 赋值运算符 (=) 给变量或属性赋值。 Atn 函数 返回数的...
一个javascript函数,可打印出所有的对象(包括数组),方便页面调试
关键字class表明定义的是一个类;... 成员,类的数据成员一般用来描述该类对象的属性,称为属性;函数成员是描 述类行为,称作方法。函数成员由函数构成,这些作为类成员的函数因此也 叫成员函数。
ASP+VBScript函数与对象参考手册.part1.rar 一共3部分,这是第1部分