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...
共计 455 篇文章,57 页。
您是Zorch的第 个小伙伴
Hits