我有以下情况:有GraphicsContext类:
class GraphicsContext {
...
private:
std::unique_ptr<Renderer> m_renderer;
}
还有一类应用程序使用了 GraphicsContext:
class Application {
...
private:
std::unique_ptr<GraphicsContext> m_graphicsContext;
}
并且有一些在 Application 类中使用的子级类,以及那些使用 GraphicsContext 中的 Renderer 的子级类。我需要在这些类中存储指向渲染器的指针,但我应该怎么做呢?
class SubLevelClass {
public:
SubLevelClass(Renderer* renderer);
...
void drawSomething();
private:
Renderer* m_renderer; // this class is not owner of Renderer but should can ability to refer to it
}
这样的子级类在语义上并不拥有渲染器,因此我认为使用 shared_ptr 而不是 unique_ptr 并不是一个好主意。但是,如果保证子级类的对象比 Application 对象的生存时间短,如何组织这种所有权呢?我可以存储并从 GraphicsContext 返回指向 Renderer 的原始指针还是语义错误的想法?