现在我们讨论一下新的C++/CLI环境下的一个很酷的特性,称作代理构造函数。

  对一个类来说,有多个构造函数是经常的事;并且这多个构造函数有一段共同的代码也很经常。一般地,在这种情况下,我们都是为该共同代码段编写一个独立的函数,然后放在每个构造器中调用。如下例:

class Foo
{
private:
int _mem;
public:
Foo() : _mem(0)
{
CommonConstructor();
}
Foo(int mem) : _mem(mem)
{
CommonConstructor();
}
Foo(const Foo& f) : _mem(f._mem)
{
CommonConstructor();
}
// 我们所有的构造器都需要的代码段 
void CommonConstructor()
{
printf("Constructing the object");
}
};

  但是现在利用C++/CLI引入的新特性-代理构造器,我们可以从一个称为基类构造器的构造器中调用另一个构造器。当你这样做时,执行控制转入到第二个构造器中,在其执行完后再返回到第一个构造器。下面代码片断中的类Foo2演示了这种方法:

class Foo2
{
private:
int _mem;
public:
// 该构造器调用第二个称为基类构造器的构造器
Foo2() : Foo2(0)
{
}
// 下面这个构造器包含由所有构造器使用的公共代码
Foo2(int mem) : _mem(mem)
{
printf("Constructing the object"); 
}
Foo2(const Foo2& f) : Foo2(f._mem)

}
};

  然而,每个类都应该包含至少一个非代理构造器,不过该构造器仍然可以有调用一个或者多个基类构造器的初始化操作。

  注意,早期情况下,如果你想试用一下代理构造函数,应该会出现一个编译错误。请注意,这是由于资源问题缺乏导致的,在现在版本的C++/CLI中可以避免这一错误。

本文转自朱先忠老师51CTO博客,原文链接: http://blog.51cto.com/zhuxianzhong/59847,如需转载请自行联系原作者

C++/CLI思辨录之代理构造函数相关推荐

  1. C++/CLI思辨录之内部指针的两面性

    在本文中,我将解释为什么使用本地指针来管理对象.原因在于对象是以垃圾收集器移动的.所以,当对象移动时,本地指针就变成无效的.所以,如果你想取得一个托管对象的本地指针,你就会遇到一个编译错.下面的代码显 ...

  2. C++/CLI思辨录之Object的对象布局

    C++/CLI相对纯C++来说,支持创建托管引用对象,托管对象由虚拟机来分配内存和管理,程序员可以不再担心内存泄漏的问题.其实,说白了也就是相当于自己创建一个内存池,并且虚拟机实际上也是这样做的. 在 ...

  3. C++/CLI思辨录之传递托管堆地址

    新的C++特点平衡了把托管堆的地址传递到非托管代码的能力.早期我们遇到的最大问题是,在托管堆中的对象的位置是非静态的.垃圾收集器以变化的时间间隔移动对象.现在新的pin_ptr(别针型指针)的引入禁止 ...

  4. C++/CLI思辨录之再谈继承

    在面向对象编程领域一个关键的概念是继承. 在OO和C++中,类成员共有三种级别的继承:public,protected和private.对于基类成员的存取操作应该依赖于下面两个因素: ·派生类声明其类 ...

  5. PPG成长思辨录:轻公司的光环与谜局

    PPG成长思辨录:轻公司的光环与谜局 -------------------------------------------------------------------------------- ...

  6. day 5-登录和代理IP学习总结

    day 5-登录和代理IP 1. 京东商品 from selenium.webdriver import Chrome, ChromeOptions import time, csv, os from ...

  7. 《Apache Common CLI官方文档

    本篇文章是并发编程网组织的一次Apache Common组件翻译的一部分,因为无意中看到了Apache Common CLI感觉很好奇,因为这个工具很少在网上看到,当然或许我没有关注过.因为我之前也写 ...

  8. [C++11]委托构造函数

    委托构造函数允许使用同一个类中的一个构造函数调用其他的构造函数,从而简化相关变量的初始化. 注意点: 1.这种链式的构造函数调用不能形成一个闭环(死循环),否则会在运行期抛异常. 2.如果要进行多层构 ...

  9. java代理通俗简单解析

    1         代理 1.1            代理的概念和作用 代理的概念很好理解,就像黄牛代替票务公司给你提供票,经纪人代理艺人和别人谈合作.Java的代理是指实现类作为代理类的属性对象, ...

最新文章

  1. GitLab CI流水线配置文件.gitlab-ci.yml详解(三)
  2. 2021易烊千玺高考成绩查询,易烊千玺高考分数公布?最骄傲的是他?网友:分太低!...
  3. jndi连接池链接mysql_使用容器提供的数据库连接池--JNDI用法
  4. js判断页面是首次加载还是刷新
  5. springboot起步配置和自动配置原理
  6. NYOJ 311 完全背包
  7. carsim学习笔记5——carsim与simulink联合仿真
  8. QT的QScriptEngineAgent类的使用
  9. 程序员版的《后来的我们》,结局竟是……
  10. 老司机带你用 Go 语言实现 MapReduce 框架
  11. Linux内核写入s3c2440,Linux空板的系统写入
  12. 大型石油公司联手银行推出能源商品交易区块链平台
  13. mouseenter和mouseleave跟mouseover和mouseout
  14. 【企业了解】巨量引擎(飞鱼CRM)
  15. windows驱动 - IRQL
  16. 台式计算机电源线 规格,电脑电源线规格的介绍
  17. (2022年6月)注册ArcGIS Online(Learn ArcGIS) 21天免费账号笔记
  18. 百鸡问题扩展-N鸡问
  19. 数学基础 - 第十七章 勾股定理
  20. android 来电解锁,带你解锁手机隐藏黑科技,极少人知道!

热门文章

  1. UIRemoteNotificationType 参考
  2. 从无头单链表中删除节点 结构之法 4
  3. wp7 生命周期及多任务 详解
  4. [C#1] 10-事件
  5. Vue 项目实现按钮级别权限管理
  6. Python学习笔记__4章 函数式编程
  7. Windows Server 2008 R2模板机制作(VMware Workstation)
  8. 阿里云 apt-get update 403
  9. RouterOS DNS劫持 -- A记录
  10. 按钮控件里面的间距问题