Skip to content

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

@Charliechen114514

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 的优势」正文

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
    No fields configured for Feature.

    Projects

    Status
    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions