Предположим, я хочу обернуть некоторый библиотечный код внутри объекта.Эту библиотеку необходимо настроить и инициализировать, вызвав некоторую функцию внутри конструктора этого класса-оболочки.
Затем «объекты» библиотеки будут расходиться, создавая больше разных «объектов», которые класс-оболочка оборачивает в видееще один объект-обертка, который должен быть простым членом этого класса.
Но, насколько я понимаю, члены классов могут быть инициализированы или созданы только путем вызова их конструктора в списке инициализатора конструктора.Выполнение этих битов кода предшествовало конструктору фактического класса, который выполняет инициализацию библиотеки и ее среды, что делает для меня невозможной фактическую инициализацию этого объекта-члена как члена и вместо этого вынуждает меня инициализировать его как указатель навторая обертка, потому что ее конструктор должен вызываться вручную в коде первого конструктора.
Пример:
class A {
public:
A() {
if(!wrapped_library_init()) {
exit(CRITICAL_ERROR);
}
ptr_to_some_library_metadata *a = library_function(); /*Needs to
be called after wrapped_library_init() or needs a pointer to some
wrapped object created inside this constructor */
//initialize b
}
private:
B b; //Wants to be a member but can not
};
class B {
B(ptr_to_some_library_metadata *a);
}