gpt4 book ai didi

c++ - 理解 C++ 中 new 和 delete 运算符背后的逻辑

转载 作者:行者123 更新时间:2023-11-30 05:25:02 26 4
gpt4 key购买 nike

我试图理解 C++ 中的删除运算符。

我能理解使用指针和 new 运算符背后的逻辑,但我理解“删除运算符删除动态变量并将动态变量占用的内存返回到 freestone。”p517,使用 C++ 第 9 版解决问题。

我认为这与第三个 cout 语句不一致。我希望第三个 cout 语句与第一个语句类似。

int main() {
int *p1;
cout << "p1 address: " << &p1 << " and points to the address "<< p1 << " which has the value: " << *p1<< endl;

p1 = new int;
cout << "p1 address: " << &p1 << " and points to the address "<< p1 << " which has the value: " << *p1<< endl;

delete p1;
cout << "p1 address: " << &p1 << " and points to the address "<< p1 << " which has the value: " << *p1<< endl;

cout << endl;
return 0;
}

如果有任何解释,我将不胜感激:))

最佳答案

delete 不必更改指针指向的内存。它实际上所做的是特定于实现的。

delete 需要做的是解构给定地址处的任何对象,并将关联的内存返回到分配池。某些调试器可能会在释放时覆盖变量的值,但对于普通类型,不需要进行特殊的解构——内存可以按原样返回到池中。指针也没有改变:在 delete p 之后,我们称 p 为一个悬挂指针,它保存了释放内存的地址。通过该指针的所有访问都是未定义的行为。

由于处理原始指针,尤其是悬挂指针很容易出错,因此了解 C++ smartpointers 是件好事。 ,例如unique_ptr:

std::unique_ptr<int> p;        // initialised to nullptr
p = std::make_unique<int>(13); // new int with value 13
p = std::make_unique<int>(37); // deleted previous int, assigned new int with value 37
// optional (when p goes out of scope its pointee is deleted automatically)
p.reset(); // deleted the int and reset p to nullptr

关于c++ - 理解 C++ 中 new 和 delete 运算符背后的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38500374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com