【发布时间】:2020-09-06 13:32:24
【问题描述】:
在执行该对象的构造函数之前(例如从全局新替换)调用全局命名空间中的对象的成员函数是否有效且定义明确(不询问是否漂亮) - 以及当此成员函数执行时,该对象的成员变量是否保证初始化为零并且访问(甚至写入)它们是否没有错误? 例如:
#include <iostream>
#include <memory>
using namespace std;
struct A {
A() {
new int();
}
};
A a_;
struct B {
B() : var(10) {
}
void print() {
printf("var is %d\n", var);
var = 5;
}
int var;
};
B b_;
void* operator new(size_t bytes) {
b_.print();
b_.print();
return malloc(bytes);
}
int main()
{
b_.print();
return 0;
}
编译并打印
var is 0
var is 5
var is 10
但它是定义的行为吗?
【问题讨论】:
标签: c++ language-lawyer new-operator