nanyu

第2学堂

同意作者的观点。
提供一个DllFree();
然后自己写一个 dll_auto_ptr:

struct dll_auto_ptr
{
...
~dll_auto_ptr<>
{
DllFree(p);
}
...
private:

};
现在流行:CodeBlocks 纯用C++写成的IDE,支持 win(for vc, for bc, for g++ with mingw ), mac , linux.
re: 心跳包[未登录] 南郁 2007-12-25 21:13
TCP心跳包一般不是用户自己做,而是透明的,由TCP这一层自己做。一边是建立TCP Connection时的一个option.
你说的很有道理,“生成的目标文件完全一致”,这在C++的讨论里,称为“有共同的二进制格式”,但事实上有两个问题:

第一: “二进制格式” 的标准,不在语言里,而在操作系统手上,可惜操作系统之间往往是没有这个共同标准。所以只能通过编译成一个“伪代码”,再去调操作系统对应的功能。

第二,有了伪代码,在去调系统对应功能时,仍然可能遇上问题。那就是各个操作系统对应功能的实现差别太大,这时简单地“调用”就不可能了。比如有功能A,在操作系统O1上,只需要一个函数,而在操作系统O2上,需要3个函数的组合才能实现。所以这个“调用”,就得“智能”一点,这样就成了“虚拟机”了,也就是在不同操作系统,有不同的虚拟机实现对外统一的接口。举一个典型例子,你想吃汉堡,这时有三种情况:

1.本地有麦当劳,去麦当劳买一个,因为麦当劳的汉堡比较地道。
2.本地没有麦当劳,但有肯德基,去肯德基买一个。
3.本地根本没有卖汉堡的店。。。没关系,亲处去找面粉,鸡肉什么的,做一个,只要你愿意等。

这些事情就是虚拟机做的。C++不考虑虚拟机,所以也就不可能有运行时机制上的跨平台。但是C++的语法当然是跨平台的。还有就是库可以跨平台。比如网络,一个ACE库,确实跨了很多平台。


比如你想买一份 麦当劳的堡,但你现在所在的城市居然没有麦当劳,那就不好办了。。。