我正在制作一个用于控制我的应用程序的全局单例,并且希望子系统按特定顺序启动和关闭。
class App
{
public:
App();
~App();
void start();
void run();
void shutdown();
private:
std::unique_ptr<DisplayManager> displayManager;
std::unique_ptr<Renderer> renderer;
};
构造函数以正确的顺序创建指针
App::App()
{
displayManager = std::unique_ptr<DisplayManager>(new DisplayManager);
renderer = std::unique_ptr<Renderer>(new Renderer);
}
我希望unique_ptrs以相反的顺序释放。std :: unique_ptr是否可以保证按此顺序释放内存?
我曾考虑过让所有经理人成为全球单身人士,但我认为,如果我能使其运作起来,那就更好。
编辑:引起我注意,实际问题是实例变量成员被破坏的顺序。在那种情况下,有保证的订单吗?
std::unique_ptr
不控制何时调用析构函数。而是在声明位置确定销毁顺序。
类成员按照它们在类主体中声明的顺序构造,并以该顺序的相反顺序销毁。因此,在您的情况下,先App
构造adisplayManager
然后再renderer
构造a。当App
实例被销毁时,先renderer
销毁然后displayManager
销毁。
另请注意
App::App()
{
displayManager = std::unique_ptr<DisplayManager>(new DisplayManager);
renderer = std::unique_ptr<Renderer>(new Renderer);
}
您正在分配给默认构造unique_ptr
的。您需要使用成员初始化列表,例如
App::App(): displayManager(new DisplayManager), renderer(new Renderer) {}
// or if you want to be in the don't use new camp
App::App(): displayManager(std::make_unique<DisplayManager>()), renderer(std::make_unique<Renderer>()) {}
如果您不想默认构造指针,然后将其分配给它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句