Skip to content

修改 cpp_lifetime.md 中的措辞与问题#72

Open
Mq-b wants to merge 1 commit into
parallel101:mainfrom
Mq-b:Mq-b-dev
Open

修改 cpp_lifetime.md 中的措辞与问题#72
Mq-b wants to merge 1 commit into
parallel101:mainfrom
Mq-b:Mq-b-dev

Conversation

@Mq-b

@Mq-b Mq-b commented Dec 20, 2024

Copy link
Copy Markdown
Contributor
Class *p = new Class;  // *p 是动态存储周期
delete p;              // 释放动态分配的内存

delete p; 的注释仅为“释放动态分配的内存”不合适,根据上下文,此处还应强调调用析构函数。

特别注意,p 依然是“栈上变量”,p 指向的 *p 才是“堆上变量”!
用律师语再说一遍:p 是自动存储周期,p 指向的 *p 才是动态存储周期!(白律师最满意的一集)

律师的话并不够准确。且我认为之前的描述也存在一些问题。

我认为关键在于强调 p 是什么,*p 是什么,以及说明常用词汇“指向”到底代指着什么。

另外有必要强调 *p 返回的是指针所指向对象的引用,我认为大多数开发者事实上并不清楚这一点。

内建的取址符(*)的操作数必须是指向对象或指向函数的指针,其结果是一个 lvalue,引用的是操作数所指向的对象或函数。

T& operator*(T*);
@archibate

Copy link
Copy Markdown
Contributor

不!小彭老师背地里cue白律师被发现了 😭

Comment thread docs/cpp_lifetime.md
@@ -75,7 +75,7 @@ void func() {
```cpp
void func() {
Class *p = new Class; // *p 是动态存储周期

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

那这里是否也要强调分配了内存并调用构造函数?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

此处你没说申请内存,我就没管,认为你只是想强调 *p 是动态存储期。看你心情。

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

加上吧,多说不算错。

@Mq-b

Mq-b commented Jun 27, 2025

Copy link
Copy Markdown
Contributor Author

此pr为何还没合并😨(

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

Labels

None yet

3 participants