小编MPr*_*mer的帖子

是否保证std :: unique_ptr删除顺序?

我正在制作一个控制我的应用程序的全局单例,我希望子系统按特定顺序启动和关闭.

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++ destructor c++11

5
推荐指数
2
解决办法
1183
查看次数

从std :: list <Shape*> :: iterator调用指针上的函数

我在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() …

c++ iterator stdlist c++11

1
推荐指数
1
解决办法
47
查看次数

标签 统计

c++ ×2

c++11 ×2

destructor ×1

iterator ×1

stdlist ×1