初始化以下构造的首选方法是什么?以下示例的问题是,为了renderer_
使用它的构造函数进行初始化,我需要来自类window_
的信息,但该信息仅在所述类初始化后可用,并且两个实例同时初始化,因为它们都是相同的成员班级。
class GraphicsManager
{
public:
GraphicsManager(
const std::string &windowTitle,
const int &windowWidth,
const int &windowHeight
) : window_(windowTitle,windowWidth,windowHeight),
renderer_(window_.getHandle()); //IMPOSSIBLE, I presume
private:
Window window_;
Renderer renderer_;
};
class Window
{
public:
Window() : windowHandle_(NULL);
Window(const std::string &title, const int &width, const int &height);
~Window();
SDL_Window *getHandle();
private:
SDL_Window *windowHandle_;
};
class Renderer
{
public:
Renderer() : rendererHandle_(NULL);
Renderer(SDL_Window *WindowHandle);
~Renderer();
private:
SDL_Renderer *rendererHandle_;
};
根本不包括
renderer_
在 ' 的构造函数的初始化列表中GraphicsManager
,因此隐式调用renderer_
' 的默认构造函数。在GraphicsManager
's 构造函数的主体中,我会将一个正确初始化Renderer
的类实例分配给空的renderer_
. 这可以在构造函数的主体中执行GraphicsManager
吗?GraphicsManager( const std::string &windowTitle, const int &windowWidth, const int &windowHeight ) : window_(windowTitle,windowWidth,windowHeight) { //doable? is window_ initialized yet at this point? renderer_ = Renderer(window_.getHandle()); }
向受影响的类添加一个单独的
initialize(parameters)
方法,并使用它们来初始化所有内容而不是依赖于构造函数,但也将初始化的责任委托给类的客户端?将类的组成/层次结构更改为其他内容?