
C++进阶
cs_zh_xi
No warnings, no errors
展开
-
C++使用extern修饰const变量
假设b.cpp有变量:// in b.cppint var_b = 2333;在同一工程的a.cpp中想要使用var_b,可以如此声明:// in a.cppextern int var_b;当如果var_b是const变量呢?即是说b.cpp中var_b的声明是:// in b.cppconst int var_b = 2333;此时a.cpp的声明也加上const:// in a.cppextern const int var_b;看起来没什么问题,.原创 2020-05-31 16:37:39 · 964 阅读 · 0 评论 -
C++解析虚函数表
今天突发奇想,如何解析类的虚函数表,获取其中的内容?我们都知道,当存在虚函数时,编译器会为类生成一个虚函数表vtbl (virtual table),并在类对象中存放一个指向vtbl的指针vptr (virtual pointer)。所以只要找到对象的vptr,就能顺藤摸瓜找到类的vtbl,然后可以读出vtbl中的内容。那vptr在对象的什么地方?C++标准没有规定vptr存储的位...原创 2020-03-08 11:10:49 · 205 阅读 · 0 评论 -
memmove的实现
memmove的原型是:void*memmove(void*dst, constvoid*src, size_tcount);实现memmove有两个要点:(1)从src指向的内存拷贝count个字节到dst指向的内存中。(2)处理src和dst有重叠的情况,这是和memcpy不一样的地方。要满足条件(1)比较简单,借用memcpy的实现:...原创 2020-02-03 10:53:22 · 1338 阅读 · 1 评论 -
为什么使用std::make_shared
目录为什么使用std::make_shared减少重复代码效率更高降低内存泄露风险为什么使用std::make_sharedstd::shared_ptr是常用的智能指针,建立一个shared_ptr对象有两种方式:// (1)std::shared_ptr<Widget> p1(new Widget);// (2)std::shared_ptr<Widget>...原创 2020-01-12 11:23:24 · 4920 阅读 · 0 评论