C++ 运行时的策略模式?

C++ 运行时的策略模式?,c++,design-patterns,C++,Design Patterns,我有一个策略模式,例如,我想在游戏的主循环中运行它。问题是,如果我不删除该实例,就会出现内存泄漏,而且我还希望在其他地方使用该实例。如何在策略模式中处理内存分配/释放 CompressionContext *ctx = new CompressionContext(); //we could assume context is already set by preferences ctx->setCompressionStrategy(new ZipCompressionStrategy(

我有一个策略模式,例如,我想在游戏的主循环中运行它。问题是,如果我不删除该实例,就会出现内存泄漏,而且我还希望在其他地方使用该实例。如何在策略模式中处理内存分配/释放

CompressionContext *ctx = new CompressionContext();
//we could assume context is already set by preferences
ctx->setCompressionStrategy(new ZipCompressionStrategy());    
//get a list of files
ctx->createArchive(fileList);    
使用而不是CompressionContextBase*即原始指针

编辑:这只是一个建议,根据您提供的信息,可能还有其他具有不同语义的智能指针实现,例如unique_ptr,这可能更适合。正如@akappa所建议的,您可能希望更多地阅读该主题,以做出更好的决定-同样,根据问题中的信息,您可能希望共享ptr,但可能会遗漏其他注意事项。

使用压缩上下文库*而不是压缩上下文库*,即原始指针



编辑:这只是一个建议,根据您提供的信息,可能还有其他具有不同语义的智能指针实现,例如unique_ptr,这可能更适合。正如@akappa所建议的,你可能想更多地阅读这个主题,做出更好的决定——同样,基于问题中的信息,你可能想要一个共享的ptr,但你可能忽略了其他注意事项。

你能解释一下策略模式之类的术语,而不是假设每个人都知道它是什么,并且对它有相同的理解吗?@yurikilochek抱歉,我修正了它。@KerrekSB一个策略模式,在运行时可用于从许多算法中选择一个算法的模式取决于一个算法。对象是给定策略的实现这一事实没有什么特别之处。您正在询问如何管理C++中的内存,答案总是相同的:RAII、智能指针和对象的所有权和寿命的概念。@ KerrekSB没有,替换。用->你能解释像战略模式这样的术语而不是假设每个人都知道它是什么并且对它有相同的理解吗?@yurikilochek抱歉我修正了它。@KerrekSB一个战略模式,在运行时可用于从许多算法中选择一个算法的模式取决于一个算法。对象是给定策略的实现这一事实没有什么特别之处。您正在询问如何管理C++中的内存,答案总是相同的:RAII、智能指针和对象的所有权和寿命的概念。@ KerrekSB没有,替换。用->我不确定他是否明白重点,但是。。。不管怎样。@akappa请你解释一下重点:@akappa:好吧,这就是为什么我添加了到cppreference的链接,在那里你可以阅读到这件事。为什么像这样基本的一切都要重复一遍又一遍?@MoazELdeen:你打算如何使用这个设施?您知道谁是共享包装对象所有权的实体吗?你真的知道对象所有权是什么意思吗?顺便说一句,这些物体的寿命是多少?您是否有一项政策,规定在其他人需要时,何时删除策略或何时保留策略?等等,@bitmask:cppreference只是描述了API,没有人应该将其克隆到答案中。重点是,很可能他对内存管理一无所知,内存管理比共享内存更抽象、更一般。我不确定他是否理解这一点,但是。。。不管怎样。@akappa请你解释一下重点:@akappa:好吧,这就是为什么我添加了到cppreference的链接,在那里你可以阅读到这件事。为什么像这样基本的一切都要重复一遍又一遍?@MoazELdeen:你打算如何使用这个设施?您知道谁是共享包装对象所有权的实体吗?你真的知道对象所有权是什么意思吗?顺便说一句,这些物体的寿命是多少?您是否有一项政策,规定在其他人需要时,何时删除策略或何时保留策略?等等,@bitmask:cppreference只是描述了API,没有人应该将其克隆到答案中。关键是,他很可能对内存管理一无所知,内存管理比共享内存更抽象、更一般。