主页

C++虚函数剖析 继承,多继承和虚继承情况

写在前面 前面分析了 C++类内的虚指针和虚表, 通过二级指针解引用的方式找到虚表, 由此访问虚函数, 相较于传统的死记硬背, 我一直觉得学习编程时候能看到具体的/确切的输入输出结果, 对于掌握某个知识点要更加有效, 如果你只是知道了虚函数的原理, 却又说不清楚虚函数是怎样寻址的, 即其在类内具体存放的位置, 那么还是不能知其全貌, 掌握全局的. 下面的内容基于前一篇文章的分析, 进一步探索 C++类的多继承情况和虚继承情况下虚表/虚指针/虚函数的具体位置, 以及对象模型的一些分布情况(通过成员指针), 这里只针对 g++/clang++编译器, 所以可能有些片面, 不过像这种编译器实现应该大同小异的(因为都是 ISO 出来的) 本文内容部分参考了<深度探索 C++对...

阅读更多

Brpc 学习(一)m1 macos构建方法

写在前面 实习阶段初次接触到 RPC 这样一种协议, 以及 brpc 这样一个很棒的框架, 但是当时没时间认真深入学习, 就是围绕使用 demo 开发, 还是有点不知其所以然的, 最近抽空来学习一下 brpc, 首要的一点就是在开发机上构建项目, 并且能够跑起来, 下面来看看如何在 m1 芯片的 MacOS 上跑起来 brpc, 并且成功运行 demo 程序: echo 服务器 环境: MacOS M1 arm64 clang 14(xcode) cmake zsh 源码下载 $ git clone https://github.com/apache/brpc.git $ git branch -a $ git checkout -b release-...

阅读更多

C++虚函数剖析 从二级指针角度

写在前面 一直说 C++的多态, 其实底层原理是虚函数支持, 那么虚函数的底层原理呢, 之前一直停留在表面, 直到后来看了很多书籍/视频/博客文章, 才有了一点深刻的理解, 下面来具体看看如何通过 C 指针进行虚函数的调用, 相当于对 C 指针的一个复习, 同时也是对 C++虚函数底层原理的一个理解. 主要内容有如下几点: 二级指针的复习 通过对象首地址访问虚函数表 通过虚函数表调用虚函数 基类的私有虚函数, 可以通过指针运算访问! 这也是 C++灵活性的一个问题(缺陷) 测试代码可以参考我的 GitHub: Learn_C_CPP/oop_ood/virtual_func/read-vfunc.cpp at master · zorchp/Learn...

阅读更多

Git 常用操作

配置 git 环境 基本信息 git config --global user.name <your github name> git config --global user.email <your github email> # check : $ cat ~/.gitconfig [user] name = xxx email = yy@zz.com 这里建议采用下面的命令保存秘钥, 否则每次都要输入很麻烦(非自己机器请不要保存): git config --global credential.helper store 可以看到, 这些配置其实都是在$HOME/.gitconfig 文件中写入某些条目而已. ssh 公钥生成 ...

阅读更多

Npm相关操作

gitbook install 报错TypeError: cb.apply is not a function cd /opt/homebrew/lib/node_modules/gitbook-cli/node_modules/npm/ sudo npm install graceful-fs@latest --save gitbook下: cd .gitbook/versions/3.2.3/node_modules/npm npm install graceful-fs@latest --save Gitbook build stopped to work in node 12.18.3 · Issue #110 · GitbookIO/gitbook-cli;...

阅读更多

多线程压缩解压缩神器 pigz 使用方法总结

写在前面 首先要熟悉两个不同的操作: tar: 用于打包, 打包前后的文件大小不会有区别, 仅仅是将多个小文件打包了, 最后的结果是.tar文件 zip: 压缩格式, 可以由tar命令指定压缩格式, 会执行压缩, 但是单线程执行会导致效率比较低, 最后的结果是 .zip或者.tar.gz 可以做个实验对比一下, 这里先生成一些小的文件, 通过 Shell 来做: #!/bin/bash dir=./files tar_file=only_tar.tar targz_file=with_gzip.tar.gz # generate files for test if [ ! -d ${dir} ]; then mkdir ${dir} for...

阅读更多

C++动态数组的释放问题,delete[]是不是必须的

写在前面 好久没认认真真写博客了, 最近一直忙着实习, 写的一些东西都发在内网了. 这次来总结一下 C++中动态数组的释放, 实际上有两种情况, 针对不同的情况也有不同的处理方式, 当然最保险的还是对应, 即: new对应 delete new[]对应 delete[] 最为保险, 但是昨天看了一个笔试题, 竟然多选, 那么就可以好好思考一下了. 下面分两种情况来分析, 即: 栈内存容器(complex 模板类)以及 POD 类型, 即 C-style 的类型, 例如 int, float 等等 堆内存容器(vector 这种动态数组肯定是堆内存), 以及用户自定义类型. 情况 1: 栈内存/POD POD 类型 来看下面的代码: #incl...

阅读更多

Total views.
您是Zorch的第 个小伙伴
Hits