【发布时间】:2011-01-29 20:27:49
【问题描述】:
在下面的例子中
class X
{
int *r;
public:
X() {
cout << "X is created";
r = new int[10];
};
~X() {
cout<< "X is destroyed";
delete [] r;
};
};
class Y
{
public:
Y() {
X x;
throw 44;
};
~Y() {
cout << "Y is destroyed";
};
};
我从一个站点获得了这个 RAII 示例,并提出了一些疑问。请帮忙。
- 在 x 的构造函数中,我们没有考虑“如果内存分配失败”的场景。
- 这里 Y 的析构函数是安全的,因为在 y 构造函数中没有分配任何内存。如果我们还需要在 y 构造函数中进行一些内存分配怎么办?
【问题讨论】:
-
您可以使用重新格式化代码吗?将其分成不同的行,带间距,选择它,然后单击代码示例按钮(大引号旁边的 1 和 0)。
-
你如何定义“考虑”?如果分配失败,它会抛出,所以无论如何你都不会让“X”处于半烤状态。
-
我修复了你的代码。通常,如果您发布的代码甚至不是有效的 C++,那么获得答案会更加困难。