gpt4 book ai didi

c++ - 任何人都可以向我解释 RAII 的意义吗?

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

所以,如果我没有理解错的话,RAII 的目的是消除内存管理的麻烦。也就是说,您在对象的析构函数中执行删除操作。这样,当指针超出范围时,您不必担心删除它。所以这是我不明白的地方:为什么不首先在堆栈上声明变量?

最佳答案

您的理解有几点不对:

  1. RAII 的重点是消除资源管理的麻烦,而不仅仅是内存。例如:需要关闭的文件句柄、需要解锁的互斥锁、需要释放的对象、需要释放的内存。基本上,如果您在使用完资源后需要做一些事情,那么这对 RAII 来说是一个很好的案例。

  2. 当原始 C++ 指针超出范围时,它什么都不做。我假设您正在谈论一个智能指针,它不过是一个环绕原始指针的对象。当该对象超出范围时,将调用其析构函数,然后可以使用析构函数释放在构造函数中分配的内存。

  3. 需要“释放”的对象分配在栈上还是堆上都没有区别。关键在于,当您获取资源时,您在构造函数中执行某些操作,而当您使用完资源时,您在析构函数中执行其他操作。

关于c++ - 任何人都可以向我解释 RAII 的意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21225105/

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