Skip to content

[feat / help wanted, enhaucement]: shared-ptr控制块图示优化 #56

Description

@Charliechen114514

背景

documents/vol2-modern-features/ch01-smart-pointers/03-shared-ptr.md 在「## 控制块:shared_ptr 的内部结构」「## make_shared 的优势:单次分配」两节,用文字把 shared_ptr 的内存结构讲清楚了:每个 shared_ptr 持有的是「控制块指针」而非对象本体,控制块里存放强/弱引用计数与对象指针;make_shared 把对象和控制块放进同一块内存(单次分配),而 new + 构造 shared_ptr 是两次独立分配。

但目前该章只有一张 ./03-shared-ptr-structure.drawio 静态位图引用,没有 mermaid 图。读者很难一眼看清「shared_ptr 持有控制块」「weak_ptr 为何不延长生命周期」「make_shared 为何只一次分配」这三件事的内存结构基础。(怎么看都对新手有点地狱了。。。)

要做什么

在「## 控制块:shared_ptr 的内部结构」末尾(并在「## make_shared 的优势:单次分配」处补一条旁注)插入一个 ````mermaid` 代码块。或者在您认为合适的地方上!

建议图类型:classDiagram。大致关系骨架笔者的想法如下,如果不太对欢迎批评指正!

  • shared_ptr 组合(实线菱形)指向 ControlBlock,标注「持有强引用计数」;
  • weak_ptr 关联(虚线)指向 ControlBlock,标注「弱引用、不持有对象所有权」;
  • ControlBlock 聚合被管理对象;
  • 在 make_shared 节点旁加注「对象+控制块同一内存块」vs「两次独立分配」的对比说明。

验收标准

  • pnpm dev 渲染正确;classDiagram 关系忠实于正文(强引用 vs 弱引用区分清楚);
  • 不改动任何代码与论断,纯文档增量。

如果您不知道怎么办。。。

  • 正文已把 shared_ptr=对象指针+控制块指针、make_shared 单次分配 vs new 两次分配写得很完整,照着正文关系画即可。
  • mermaid classDiagram 语法简单(class + <|-- / o-- / 组合菱形),可参照本仓已有的 classDiagram 写法。

参考资料(如果不足,我没列全,欢迎任何补充!)

  • cppreference:std::shared_ptrstd::make_shared
  • 本文「## 控制块」「## make_shared 的优势」正文

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestfeaturefeature, which enhaucement is using in improvement no matter it is bug fix or anythong else :)good first issueGood for newcomers

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions