• 关于

    Traits有什么用

    的搜索结果

问题

请教php中如何实现对一个已定义的类的方法调用的事件监听 ?

落地花开啦 2019-12-01 19:57:59 1050 浏览量 回答数 1

回答

测试环境:VS2013的优化已禁用 (/Od),警告等级 4 (/W4) 因为你的 static CGarbo Garbo;的 CGarbo类里面并没有数据成员,CGarbo是一个空类,所以sizeof(CGarbo)==1; 如果CGarbo的public(为了测试方便)加上一个数据成员char c,另外在HungerSingleton类的GetInstance()加上cout << Garbo.c << "n"; 那么sizeof(CGarbo)还是==1; 但是在我加上char c以后,你的CGarbo有了数据成员,此时执行我给你的新改装类,则会满满的报错,error LINK2001(不解释),因为对于无数据成员的类,编译器会产生于有数据成员的类不同的目标代码,所以加上char c以后,类的目标码不同,而且编译器知道你用了未初始化的Garbo.c,如果你不在外部显示提供初始化,是通不过的。但是你去掉cout << Garbo.c << "n";这句,可以通过,因为编译器在编译的时候发现你自始至终没用过Garbo的.c,故不影响链接,不会报错。 另外补充一句,现在的编译器很智能,即使在10年前,Silicon Graphics的N32和N64编译器已经能自动为所有型别提供适当的type_traits的特化版本,进行STL优化。10年过去了,编译器技术突飞猛进,如果你懂汇编,去调整编译器的优化级别,反复观察汇编码,你就知道编译器给你优化了什么了。(我用的的/Od) 最有给你我改的代码,注释部分你好好看看,如果你去掉cout << Garbo.c << "n";的注释,就会报错。此时你再去掉首位的注释去初始化,问题就OK了。 #include using std::cout; class HungerSingleton { private: class CGarbo // 用于析构s_pInstance { public: //CGarbo(char c) :c(c){ } char c; ~CGarbo() { if (HungerSingleton::s_pInstance) delete HungerSingleton::s_pInstance; } }; static CGarbo Garbo; static HungerSingleton *s_pInstance; public: static HungerSingleton* GetInstance() { //cout << Garbo.c << "\n"; cout << sizeof(CGarbo) << "\n"; return s_pInstance; } }; HungerSingleton* HungerSingleton::s_pInstance = new HungerSingleton; //HungerSingleton::CGarbo HungerSingleton::Garbo('a'); void TestSingleton() { HungerSingleton *phgl = HungerSingleton::GetInstance(); } int main() { TestSingleton(); return 0; }

a123456678 2019-12-02 01:57:58 0 浏览量 回答数 0

问题

如何定位Android NDK开发中遇到的错误?报错

爱吃鱼的程序员 2020-06-14 18:55:10 0 浏览量 回答数 1

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板