Почему не должно быть разрешено? Все, что вы делаете, это инициализируете глобальную переменную, что вы вполне можете сделать, даже если инициализация включает вызов функции:
int i = 5 + 6;
double j(std::sin(1.25));
const Foo k = get_my_foo_on(i, 11, true);
std::ostream & os(std::cout << "hello world\n");
int * p(new int); // fine but very last-century
std::unique_ptr<int> q(new int); // ah, welcome to the real world
int main() { /* ... */ }
Конечно, вам нужно беспокоиться об удалении динамически размещаемых объектов, независимо от того, были ли они размещены в глобальной области или нет ... класс-оболочка, обладающая ресурсами, такая как unique_ptr
, была бы идеальным решением.