[英]C++ Library free pointer
我正在创建一个简单的C ++ MIDI库,但遇到一个小问题。 目前,除了读取文件之外,我已经实现了所有其他功能。 在内部,我有一个std::vector
带有事件的动态分配的原始指针(带有new()
关键字),该事件是抽象类,因此无法实例化。 现在,我终于开始阅读了,这里有一个小问题。 我将不得不自己分配对象,然后再释放它们。 但是,这会产生问题,因为库的用户可能会在事件之间包含事件或将事件附加到事件之后。 这将意味着在我的std::vector
其他位置创建了动态指针,这使得释放一个困难的问题成为可能。
为了使这个问题更笼统,我想知道应该如何使用库用户提供的指针。 我该怎么办? 我在想清单上的要点之一:
因此,请告诉我在这种情况下的惯例,在这种情况下,库的用户提供了指针,该指针被添加到您维护的列表中,然后该列表超出范围,而您将自己的指针与其混合在一起。
提前致谢!
选择一致的政策。 不要选择任何导致您必须销毁某些地方的某些对象和其他地方的其他对象的选项。 尤其不是那些由用户负责破坏某些对象的方法,而不是由其他负责的方法。 所有权应统一处理。
我的第一个建议是避免完全动态分配对象。 您是否不能存储std::vector<Event>
并按值将Event
传递给您的库? 这样,用户可以很高兴地不在乎对象的所有权,但是他们可以根据需要选择动态分配对象。
如果确实需要动态分配对象,建议您始终将它们包装在智能指针中,以便自动管理所有权。 例如,如果要代表用户分配一些对象,则其标准接口如下所示:
std::unique_ptr<Object> createObject();
另一方面,如果您的库具有需要与用户共享的一些内部动态分配,则返回std::shared_ptr
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.