我正在制作一个控制我的应用程序的全局单例,我希望子系统按特定顺序启动和关闭.
class App
{
public:
App();
~App();
void start();
void run();
void shutdown();
private:
std::unique_ptr<DisplayManager> displayManager;
std::unique_ptr<Renderer> renderer;
};
Run Code Online (Sandbox Code Playgroud)
构造函数以正确的顺序创建指针
App::App()
{
displayManager = std::unique_ptr<DisplayManager>(new DisplayManager);
renderer = std::unique_ptr<Renderer>(new Renderer);
}
Run Code Online (Sandbox Code Playgroud)
我希望以相反的顺序释放unique_ptrs.std :: unique_ptr是否保证按此顺序释放内存?
我想过让所有经理都成为全球单身人士,但如果我能让它发挥作用,我觉得这样会更好.
编辑:我注意到实际问题是实例变量成员被破坏的顺序.在那种情况下是否有保证订单?
我在C++中有一个基本的多态性示例,具有以下结构.
struct Shape {
virtual void draw() = 0;
};
struct Circle : public Shape {
virtual void draw() {
cout << "drawing circle" << endl;
}
};
struct Triangle : public Shape {
virtual void draw() {
cout << "drawing triangle" << endl;
}
};
Run Code Online (Sandbox Code Playgroud)
我有一个使用此设置的函数来调用绘图函数:
void drawShapes(list<Shape*> shapes) {
list<Shape*>::iterator pShape = shapes.begin();
list<Shape*>::iterator pEnd = shapes.end();
for (; pShape != pEnd; pShape++) {
pShape->draw();
}
}
Run Code Online (Sandbox Code Playgroud)
这正是我正在阅读的书中设置示例的方式.我尝试编译时遇到以下错误.
expression must have a pointer-to-class type
Run Code Online (Sandbox Code Playgroud)
我通过更改pShape->draw();为修复此问题(*pShape)->draw() …