//c++中匿名对象初始化新对象
#include<iostream>
using namespace std; class Point{
public:
Point(){
cout << "我是自定义的无参构造函数1" << endl;
}
Point(Point &pm){
cout << "我是自定义的拷贝构造函数3" << endl;
}
~Point(){
cout << "我是自定义的析构函数2" << endl;
}
private:
int x;
int y;
}; Point ProtectA(){
Point p1;//注意:此时p1对象在栈中开辟内存空间,用了new关键字才会在堆上开辟内存空间
//执行到16行代码---c++编译器调用p1的无参构造函数
return p1;
//执行到18行代码---c++编译器先自动生成一个匿名对象,
//调用这个匿名对象的拷贝构造函数(假设用户没有定义拷贝构造函数,并且用户已经定义了无参构造函数,那么c++编译器还是会自动生成一个拷贝构造函数)
//然后调用p1的析构函数
} void ProtectB(){
Point pt = ProtectA();
//执行31行时,观察发现c++编译器不会调用pt的任何构造函数
//本质上是c++编译器做了优化,当发现匿名对象初始化一个新对象时,会直接把这个匿名对象转成新对象
//不会再去构造生成一个新对象--这是c++编译器为了效率上的考虑
}
//执行完ProtectB()会执行pt的析构函数 void main(){
ProtectB();
system("pause");
}

C++ 匿名对象初始化新对象的更多相关文章

  1. C# 动态创建实例化泛型对象,实例化新对象 new()

    普通类实现字符串创建实例: var type =Assembly.Load("SqlSugar").GetType("SqlSugar.SqlServerDb" ...

  2. Java类和对象初始化

    类的生命周期: Java类的初始化: 本阶段负责为类变量赋正确的初始值.(类变量即静态变量) Java编译器把所有的类变量初始化语句和静态初始化器通通收集到<clinit>方法中,该方法只 ...

  3. openerp学习笔记 对象继承,对象初始化数据

    1.对象继承     _inherit = "product.product" 继承产品对象,给产品对象添加字段或方法,不需要设置 _name._table 等属性     注意: ...

  4. EC笔记,第一部分:4.确定对象初始化

    04.确定对象初始化 将对象初始化,C++反复无常,所以在使用前应该手动初始化 1.分清赋值与初始化 以下例子: class test{ public: int a; test(){ a=0;//赋值 ...

  5. Ajax技术之使用XMLHttpRequest对象(一)【初始化XMLHttpRequest对象】

    在初始化XMLHttpRequest对象时要考虑两种情况,一种是IE浏览器,另一种是非IE浏览器.在IE浏览器中要把XMLHttpRequest实例化一个ActiveX对象 http_request ...

  6. C++ 构造函数_内存分区_对象初始化

    内存分区 栈区:int  x = 0:int  *p = NULL; 定义一个变量,定义一个指针时,会在栈区进行分配内存.分配的内存系统分配收回的,我们不用管. 堆区:int  *p = new  i ...

  7. js之数据类型(对象类型——构造器对象——函数1)

    函数它只定义一次,但可能被多次的执行和调用.JavaScript函数是参数化的,函数的定义会包括形参和实参.形参相当于函数中定义的变量,实参是在运行函数调用时传入的参数. 一.函数定义 函数使用fun ...

  8. C++ //拷贝构造函数调用时机//1.使用一个已经创建完毕的对象来初始化一个新对象 //2.值传递的方式给函数参数传值 //3.值方式返回局部对象

    1 //拷贝构造函数调用时机 2 3 4 #include <iostream> 5 using namespace std; 6 7 //1.使用一个已经创建完毕的对象来初始化一个新对象 ...

  9. 【ES6】对象的新功能与解构赋值

    ES6 通过字面量语法扩展.新增方法.改进原型等多种方式加强对象的使用,并通过解构简化对象的数据提取过程. 一.字面量语法扩展 在 ES6 模式下使用字面量创建对象更加简洁,对于对象属性来说,属性初始 ...

随机推荐

  1. Linux系统登录:本地登录与远程登录

    安装登录系统的位置可以将登录方式分为两种:本地登录和远程登录.本地登录可以使用图形界面和命令行模式(也称字符界面)两种方式:远程登录可以使用SSH.Telnent.VNC.SFTP 4种方式. 常见的 ...

  2. JDBC 元数据信息 getMetaData()

    数据库元数据信息: import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.SQLExcept ...

  3. linux内核学习推荐书籍

    <UNIX环境高级编程>,推荐指数:★★★★★ <UNIX环境高级编程>是 Unix/ Linux 程序员案头必备的一本书籍.可以说,Linux 程序员如果没有读过这本书,就好 ...

  4. 【小程序】微信小程序之地图功能

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/55004841 基本使用 地图组件使用起来也很简单. .wxml <map id= ...

  5. nginx配置用户认证

    location ~ .*admin\.php$ {             auth_basic "weifenglinux auth";             auth_ba ...

  6. C++:CursorType光标类型 和 LockType锁定类型

    简要: CursorType光标类型: 1.   AdOpenForwardOnly   (默认值)一次只能向前移动一行. 2.   AdOpenKeyset   打开键集类型游标. 3.   AdO ...

  7. 请介绍WCF服务

    WCF本质上提供一个跨进程.跨机器以致跨网络的服务调用 WCF合并了Web服务..net Remoting.消息队列和Enterprise Services的功能并集成在Visual Studio中, ...

  8. 学习XML(添加一个子节点) 摘录

    这里介绍添加XML节点的方法. 首先定义XML文件:(bookstore.xml) <?xml version="1.0" encoding="utf-8" ...

  9. 给Editplus去掉.bak文件

    Tools-->Configure User Tools-->Files-->去掉create bacup file when saving前复选框的对号.

  10. java项目部署后的文件路径获取

    //eclipse部署工程 String path = request.getServletContext().getRealPath( File.separator+ "WEB-INF&q ...