在查看旧代码时,我发现了类似于以下代码的内容
void* legacy_type::operator new(size_t size) {
return pool_alloc(size);
}
已知pool_alloc永远不会抛出异常,并在失败时返回0。
这里没有std::nothrow的new重载。
我想知道这段代码是否在语义上正确并具有良好的定义行为。
new (std::nothrow) legacy_type;
应该使用自定义pool_alloc吗?在我的编译器中,它根本无法编译。这是良好定义的行为吗?
如果重载的operator new
返回零,构造函数是否应该运行并崩溃(由于this==0
)?在我的编译器中,它会运行(并在成员初始化时崩溃)。这是标准明确定义的行为吗?
operator new
返回空指针,则不应调用构造函数,然后整个new
表达式本身将返回空指针。 - Simple