码迷,mamicode.com
首页 > 编程语言 > 详细

C++进阶--静态初始化的惨败

时间:2018-12-24 10:23:35      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:dog   fir   文件   include   first   程序崩溃   class   依赖   asc   

/* 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++进阶--静态初始化的惨败

标签:dog   fir   文件   include   first   程序崩溃   class   依赖   asc   

原文地址:https://www.cnblogs.com/logchen/p/10166576.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!