mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Use unique_ptr instead of shared_ptr for PluginInterface pointers
unique_ptr is simpler, and can be easily converted to shared_ptr if needed, and makes it obvious that each call will return a new pointer. This does mean that if I want to hold onto the objects again in the future for some reason, that'll need the API to change back, but that seems unlikely. unique_ptr not being copyable does make using it a little more awkward, but that only happened in one place in LOOT's code, and there the pointer needs to become shared anyway.
This commit is contained in:
@@ -171,7 +171,7 @@ void Game::LoadPlugins(const std::vector<std::filesystem::path>& pluginPaths,
|
||||
|
||||
void Game::ClearLoadedPlugins() { game_->clear_loaded_plugins(); }
|
||||
|
||||
std::shared_ptr<const PluginInterface> Game::GetPlugin(
|
||||
std::unique_ptr<const PluginInterface> Game::GetPlugin(
|
||||
std::string_view pluginName) const {
|
||||
const auto pluginOpt = game_->plugin(convert(pluginName));
|
||||
if (!pluginOpt->is_some()) {
|
||||
@@ -179,19 +179,19 @@ std::shared_ptr<const PluginInterface> Game::GetPlugin(
|
||||
}
|
||||
|
||||
try {
|
||||
return std::make_shared<Plugin>(
|
||||
return std::make_unique<Plugin>(
|
||||
std::move(pluginOpt->as_ref().boxed_clone()));
|
||||
} catch (const ::rust::Error& e) {
|
||||
std::rethrow_exception(mapError(e));
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<const PluginInterface>> Game::GetLoadedPlugins()
|
||||
std::vector<std::unique_ptr<const PluginInterface>> Game::GetLoadedPlugins()
|
||||
const {
|
||||
std::vector<std::shared_ptr<const PluginInterface>> plugins;
|
||||
std::vector<std::unique_ptr<const PluginInterface>> plugins;
|
||||
for (const auto& pluginRef : game_->loaded_plugins()) {
|
||||
plugins.push_back(
|
||||
std::make_shared<Plugin>(std::move(pluginRef.boxed_clone())));
|
||||
std::make_unique<Plugin>(std::move(pluginRef.boxed_clone())));
|
||||
}
|
||||
|
||||
return plugins;
|
||||
|
||||
+2
-2
@@ -35,10 +35,10 @@ public:
|
||||
|
||||
void ClearLoadedPlugins() override;
|
||||
|
||||
std::shared_ptr<const PluginInterface> GetPlugin(
|
||||
std::unique_ptr<const PluginInterface> GetPlugin(
|
||||
std::string_view pluginName) const override;
|
||||
|
||||
std::vector<std::shared_ptr<const PluginInterface>> GetLoadedPlugins()
|
||||
std::vector<std::unique_ptr<const PluginInterface>> GetLoadedPlugins()
|
||||
const override;
|
||||
|
||||
std::vector<std::string> SortPlugins(
|
||||
|
||||
Reference in New Issue
Block a user