Mac dmg文件灰色无法安装
2014-07-06 19:34
253 查看
所谓static对象,其寿命从被构造出来直到程序结束为止,因此
stack和heap-based对象都被排除。这种对象包括global对象,定
义于namespace作用域内的对象、在class内、在函数内、以及在
file作用域内被声明为static的对象。函数内的static对象称为
local static对象(因为它们对函数而言是local),其他static
对象称为non-local static对象。程序结束时static对象会被自动
销毁,也就是它们的析构函数会在main()结束时被自动调用。
所谓编译单元(translation unit)是指产出单一目标文件
(single object file)的那些源码。基本上它是单一源码文件加
上其所含入的头文件。
C++对“定义于不同编译单元内的non-local static对象”的初始
化次序并无明确定义。
问题来了:如果某编译单元内的某个non-local static对象的初始
化动作使用了另一个编译单元内的某个non-local static对象,它
所用到的这个对象可能尚未被初始化。
解决方法:
将每个non-local static对象搬到自己的专属函数内(该对象在此
函数内被声明为static)。这些函数返回一个reference指向它所
含的对象。然后用户调用这些函数,而不直接指涉这些对象。这个
专属函数我们叫它reference-returning函数。其形式大致为:
“该函数被调用期间”“首次遇上该对象之定义式”时被初始化。
但从另一个角度看,这些函数“内含static对象”的事实使他们在
多线程系统中带有不确定性。我们可以在程序的单线程启动阶段手
工调用所有reference-returning函数,这可消除与初始化有关的
“竞速形式(race conditions)”。
我们总是需要为内置型对象进行手工初始化,因为C++不保证初始化他们。
本文出自 “宁静致远” 博客,请务必保留此出处http://coolbreezex.blog.51cto.com/2884642/1334071
stack和heap-based对象都被排除。这种对象包括global对象,定
义于namespace作用域内的对象、在class内、在函数内、以及在
file作用域内被声明为static的对象。函数内的static对象称为
local static对象(因为它们对函数而言是local),其他static
对象称为non-local static对象。程序结束时static对象会被自动
销毁,也就是它们的析构函数会在main()结束时被自动调用。
所谓编译单元(translation unit)是指产出单一目标文件
(single object file)的那些源码。基本上它是单一源码文件加
上其所含入的头文件。
C++对“定义于不同编译单元内的non-local static对象”的初始
化次序并无明确定义。
问题来了:如果某编译单元内的某个non-local static对象的初始
化动作使用了另一个编译单元内的某个non-local static对象,它
所用到的这个对象可能尚未被初始化。
解决方法:
将每个non-local static对象搬到自己的专属函数内(该对象在此
函数内被声明为static)。这些函数返回一个reference指向它所
含的对象。然后用户调用这些函数,而不直接指涉这些对象。这个
专属函数我们叫它reference-returning函数。其形式大致为:
class classNameA { ... }; class classNameB { ... inline classNameA& clsNameAObj() { static classNameA clsNameA; return clsNameA; } ... }这个方法的基础在于:C++保证,函数内的local static对象会在
“该函数被调用期间”“首次遇上该对象之定义式”时被初始化。
但从另一个角度看,这些函数“内含static对象”的事实使他们在
多线程系统中带有不确定性。我们可以在程序的单线程启动阶段手
工调用所有reference-returning函数,这可消除与初始化有关的
“竞速形式(race conditions)”。
我们总是需要为内置型对象进行手工初始化,因为C++不保证初始化他们。
本文出自 “宁静致远” 博客,请务必保留此出处http://coolbreezex.blog.51cto.com/2884642/1334071
相关文章推荐
- MAC系统PKG文件和DMG文件有哪些区别&VMWare安装Mac OS
- Mac 命令行安装 dmg文件
- 解决Mac安装M2Crypto提示无法找到openssl头文件问题
- mac 安装dmg文件时,提示 dmg not recognized
- Qt在 Mac系统发布程序(widgets和quick2)生成dmg安装文件。
- 学习潜水-20160831-Mac移动硬盘内部分文件变成灰色导致无法复制和执行
- 移动硬盘无法移动文件到Mac图标为灰色
- Mac下安装与配置Go语言开发环境 无法写入系统文件的解决方法
- 解决Mac安装M2Crypto提示无法找到openssl头文件问题
- 2013 Mac Air 装Win7双系统问题-安装程序无法创建新的分区,也无法定位系统 & Windows无法安装所需的文件,错误代码0x80070570
- MAC安装dmg后无法推出应用安装
- 【mac】vmware tools 在菜单上显示灰色无法安装的问题
- xp sp2 pro 安装IIS时候出现 安装程序无法复制文件staxmem.dl_
- Win2003安装IIS时,提示无法复制staxmem.dll、iisapp.vbs、convlog.exe等文件的解决方法
- myeclipse5.1.1 for eclipse3.2安装后无法创建JSP文件,并且也打不开已有的JSP文件,myeclipse 打不开jsp
- 无法打开项目文件:****.csproj,此安装不支持该项目类型,怎么解决?
- xp sp2 pro 安装IIS时候出现 安装程序无法复制文件staxmem.dl_
- “因以下文件损坏〈window root>/system32/hal.dll 损坏无法正常启动请安装以上的拷贝文件”解决
- 无法打开项目文件: .csproj,此安装不支持该项目类型,怎么解决?
- Mac OS X 10.4.7 DMG 文件如何转化成ISO文件