/* Initialization Fiasco
一个会使程序崩溃的细微的问题
*/ // 不同文件的编译顺序是不确定的
// 如果一个文件依赖另一个文件的对象先初始化,可能出现问题 // 解决方法: Singleton
#include "Global.h"
#include "Dog.h"
#include "Cat.h" Dog* Singleton::pd = 0;
Cat* Singleton::pc = 0; Dog* Singleton::getDog() {
if (!pd)
return new Dog("Gunner"); //Initialize Upon First Usage Idiom
return pd;
} Cat* Singleton::getCat() {
if (!pc)
return new Cat("Smokey");
return pc;
} Singleton::~Global() {
if (pd) delete pd;
if (pc) delete pc;
pd = 0;
pc = 0;
}

C++进阶--静态初始化的惨败的更多相关文章

  1. Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究

    Java与C++有一个不同之处在于,Java不但有构造函数,还有一个”初始化块“(Initialization Block)的概念.下面探究一下它的执行顺序与可能的用途. 执行顺序 首先定义A, B, ...

  2. Java 中的 static 使用之静态初始化块

    Java 中可以通过初始化块进行数据赋值.如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块.如果使用 static 修饰初始化块,就称为静态初始化块. 需要特别注意: ...

  3. java中的静态初始化块

    Java 中可以通过初始化块进行数据赋值.如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块.如果使用 static 修饰初始化块,就称为静态初始化块. 需要特别注意: ...

  4. static静态初始化块

    Java 中可以通过初始化块进行数据赋值.如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块.如果使用 static 修饰初始化块,就称为静态初始化块. 需要特别注意: ...

  5. java静态初始化代码块

    /* * 为什么Java中为什么没有静态构造函数.其实Java中不叫静态构造函数,称作静态初始化,或者静态代码块. * 可以通过这样的代码实现相同的功能: */ public class test { ...

  6. JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想

    JAVA之旅(三)--数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想 我们继续JAVA之旅 一.数组 1.概念 数组就是同一种类型数据的集合,就是一个容器 数组的好 ...

  7. static之静态初始化块

    static之静态初始化块 所有的静态初始化块都优先执行,其次才是非静态的初始化块和构造函数,它们的执行顺序是:    父类的静态初始化块    子类的静态初始化块    父类的初始化块    父类的 ...

  8. 请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。

    答:执行顺序:静态初始化块->初始化块->构造函数 静态初始化块:在第一次加载类时执行,与对象的创建无关. 构造代码块:在调用构造方法时执行. 构造函数:在调用构造函数时执行.

  9. Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法)

    1.执行顺序 1.1.一个类中的初始化顺序 类内容(静态变量.静态初始化块) => 实例内容(变量.初始化块.构造器) 1.2.两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)= ...

随机推荐

  1. Bigining

    今天,我的第一个软件工程项目团队组建成功,找到了自己的队友. 从现在开始就要分析和构思项目的具体内容.

  2. win都是数据更新

    1:一种新的类型: 枚举: 枚举是一种描述性的名称 定义一组有限的值,不能包含方法 对可能的值进行约束 枚举保证了赋值的合理性 2:   public enum Grader(枚举的名称){ Male ...

  3. Gym -102007 :Benelux Algorithm Programming Contest (BAPC 18) (寒假自训第5场)

    A .A Prize No One Can Win 题意:给定N,S,你要从N个数中选最多是数,使得任意两个之和不大于S. 思路:排序,然后贪心的选即可. #include<bits/stdc+ ...

  4. python开发day02

    一 while循环 while 条件 代码块(循环体)  #:  判断条件是否为真,如果是真,则执行代码块, 然后再次回头判断条件是否为真,如果为真,则只执行代码块.......知道循环的判断出代码为 ...

  5. 特殊符号 sort_wc_uniq命令 tee_tr_split命令

     *     任意个 任意字符 ?    任意一个字符  #     注释字符   \     转意符   |     管道符  (之前有说过) cut  命令: cut  -d "&quo ...

  6. Two Sum II - Input array is sorted

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  7. 【spring源码分析】spring和@PostConstruct注解

    @PostConstruct注解好多人以为是Spring提供的.其实是Java自己的注解. Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法.被@Pos ...

  8. adx-desc-adtype统计

    数据分析脚本: filepath="request.log.2017-12-01-15" File.open("#{filepath}").each do |l ...

  9. Hive GenericUDF2

    再来看一个分数统计的小例子. 在Hive中存在如下一张表: hive> describe tb_test2; OK name    string score_list  array<map ...

  10. 00centos安装

    CentOS6.9及CentOS7.4的安装详细步骤 安装前的准备工作:1 VMware已经安装好2 镜像文件下载好(在这里,我用的是CentOS-6.9-x86_64-bin-DVD1.iso和Ce ...