gpt4 book ai didi

c++ - 如何使用RAII获取类资源?

转载 作者:可可西里 更新时间:2023-11-01 18:06:43 27 4
gpt4 key购买 nike

有一个例子表明以这种方式使用 RAII:

class File_ptr{
//...
File* p;
int* i;
public:
File_ptr(const char* n, const char* s){
i=new int[100];
p=fopen(n,a); // imagine fopen might throws
}
~File_ptr(){fclose(p);}
}

void use_file(const char* fn){
File_ptr(fn,"r");
}

是安全的。但我的问题是:如果在 p=fopen(n,a); 中抛出异常怎么办,那么分配给 i 的内存不会返回。假设 RAII 告诉您,然后每次您希望 X 安全时,X 获取的所有资源都必须在堆栈上分配,这是否正确? ?如果正在创建 X.a 那么 a 的资源也必须放在堆栈上吗?一次又一次,我的意思是最后如果有一些资源放在堆上如何用 RAII 处理它?如果不是我的课,即

最佳答案

RAII 的全部要点是不将任何资源(如 int 数组)分配给悬挂指针。相反,使用 std::vector 或将数组指针分配给 std::unique_ptr 之类的东西。这样,资源将在发生异常时被销毁。

不,你不必使用 STL,但要使用 RAII,最低的基础资源(如堆分配数组)也必须使用 RAII 创建,最简单的方法是使用 STL 而不是编写自己的智能指针或 vector 。

关于c++ - 如何使用RAII获取类资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16200226/

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