examples/daemon: fix scoping issue for optional provider

Bug: 24408713
Change-Id: Iad6639fa7db66f73ea264d4030b2cec0da889a91
Reviewed-on: https://weave-review.googlesource.com/1361
Reviewed-by: Johan Euphrosine <proppy@google.com>
diff --git a/libweave/examples/daemon/main.cc b/libweave/examples/daemon/main.cc
index d49576a..a85a980 100644
--- a/libweave/examples/daemon/main.cc
+++ b/libweave/examples/daemon/main.cc
@@ -86,22 +86,19 @@
   weave::examples::CurlHttpClient http_client{&task_runner};
   weave::examples::EventNetworkImpl network{&task_runner};
   weave::examples::BluetoothImpl bluetooth;
+  std::unique_ptr<weave::examples::AvahiClient> dns_sd;
+  std::unique_ptr<weave::examples::HttpServerImpl> http_server;
+  std::unique_ptr<weave::examples::WifiImpl> wifi;
 
-  std::unique_ptr<weave::Device> device;
-  if (disable_privet) {
-    device =
-        weave::Device::Create(&config_store, &task_runner, &http_client,
-                              &network, nullptr, nullptr, nullptr, &bluetooth);
-  } else {
-    weave::examples::AvahiClient dns_sd;
-    weave::examples::HttpServerImpl http_server{&task_runner};
-    weave::examples::WifiImpl wifi{&task_runner, force_bootstrapping};
-    device = weave::Device::Create(
-        &config_store, &task_runner, &http_client, &network, &dns_sd,
-        &http_server,
-        weave::examples::WifiImpl::HasWifiCapability() ? &wifi : nullptr,
-        &bluetooth);
+  if (!disable_privet) {
+    dns_sd.reset(new weave::examples::AvahiClient);
+    http_server.reset(new weave::examples::HttpServerImpl{&task_runner});
+    if (weave::examples::WifiImpl::HasWifiCapability())
+      wifi.reset(new weave::examples::WifiImpl{&task_runner, force_bootstrapping});
   }
+  std::unique_ptr<weave::Device> device{weave::Device::Create(
+      &config_store, &task_runner, &http_client, &network, dns_sd.get(),
+      http_server.get(), wifi.get(), &bluetooth)};
 
   if (!registration_ticket.empty()) {
     device->Register(registration_ticket,