gpt4 book ai didi

c# - c++ auto_ptr 与托管指针有何关系(Java、C#...)

转载 作者:太空宇宙 更新时间:2023-11-04 14:58:45 25 4
gpt4 key购买 nike

我来自托管世界,我对 C++ 自动内存管理还不是很清楚

如果我理解正确的话,我将一个指针封装在一个堆栈对象中,当 auto_ptr 超出范围时,它会自动调用指向对象的 delete 吗?

我应该如何使用它以及我应该如何自然地避免固有的 C++ 问题?

最佳答案

auto_ptrRAII 的最简单实现在 C++ 中。你的理解是正确的,每当它的析构函数被调用时,底层指针得到 deleted。

这是比 C 更上一层楼,在 C 中没有析构函数,任何有意义的 RAII 都是不可能的。

迈向自动内存管理的下一步是 shared_ptr .它使用引用计数来跟踪对象是否存活。这允许程序员更自由地创建对象,但仍然不如 Java 和 C# 中的垃圾收集功能强大。这种方法失败的一个例子是循环引用。如果 A 有一个指向 B 的引用计数指针,而 B 有一个指向 A 的引用计数指针,它们将永远不会被破坏,即使没有其他对象正在使用这两者。

现代面向对象的语言使用 mark and sweep 的某种变体.这种技术允许管理循环引用,并且对于大多数编程任务来说足够可靠。

关于c# - c++ auto_ptr 与托管指针有何关系(Java、C#...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2152500/

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