【发布时间】:2021-09-18 05:50:29
【问题描述】:
所以,想象一下我有这个代码:
typedef struct Point {
float x;
float y;
} Point;
class Foo {
private:
Point * p;
public:
Foo () {
this->p = (Point *) malloc(sizeof(Point));
if (this->p == NULL) {
// throw exception_malloc_fail;
}
}
};
一旦 malloc 在构造函数中分配内存失败,我应该抛出哪种异常?
在这种情况下,我不能简单地返回false 或NULL。所以throw 声明应该是要走的路。
但是,我找不到要抛出的正确类型的异常。我应该抛出一个默认异常吗?或者有适合这种情况的吗?
【问题讨论】:
-
你有理由使用
malloc而不是new,它会自动抛出吗?malloc不会调用构造函数,通常用于不支持构造函数的不同语言中。 -
typedef struct Point让我觉得这是来自 C 的人,而malloc只是被标记了。 -
更好的是,完全避免分配并使用
Point p而不是指针。 -
“在我看来,它消耗的内存更少,使用 malloc 更快” @CarlHR 你的眼睛会欺骗你。
new不会比malloc花费更多(事实上,new通常是用malloc编写的)。然而new实际上是 C++ 语言 的一部分,并开始一个新对象的生命周期;malloc不是,如果您有一个微不足道的对象,则会导致未定义的行为。这不是个人喜好问题。这是一个非常重要的对与错问题。如果您不熟悉它,我强烈建议您熟悉它
标签: c++ error-handling constructor malloc throw