在查看遗留代码时,我发现类似于以下代码
void* legacy_type::operator new(size_t size) {
return pool_alloc(size);
}
众所周知,pool_alloc 在失败的情况下永远不会抛出并返回 0。
这里的 new 的 std::nothrow 变体没有重载。
我想知道这段代码在语义上是否正确并且具有明确定义的行为。
应该new (std::nothrow) legacy_type;
使用自定义 pool_alloc 吗?在我的编译器中,它根本无法编译。它是明确定义的行为吗?
this==0
如果重载operator new
返回零,构造函数是否应该运行并崩溃?在我的编译器中它运行(并在成员初始化时崩溃)。它是标准的定义良好的行为吗?