Re: Replace Gtk::manage() with std::unique_ptr<>?



Some additional thoughts:

1) Using std::shared_ptr encourages me, to use the pointer multible times in 
the same way. But this is not OK here.

auto button = std::make_shared<Gtk::Button>("a button");
{ 
  Gtk::Frame frame;
  frame.add(button); // OK
  button.set_label("text"); // OK
}
{ 
  Gtk::Frame frame2;
  frame2.add(button); // not OK, if button is destroyed with the destruction 
of frame
  button.set_label("text");
}


2) We could use a new pointer type, containing a pointer and a boolean 
(managed or not managed). So (pointer, true) is like std::unique, (pointer, 
false) is like a raw pointer.

auto button = Gtk::managed_ptr<Gtk::Button>("a button"); // (pointer, true)
{ 
  Gtk::Frame frame;
  frame.add(button); // converts button to (pointer, false)
  button.set_label("text"); // OK
}
{ 
  Gtk::Frame frame2;
  frame2.add(button); // run time error, since button is like a raw pointer
  button.set_label("text");
}

But this means, we do not use an existing model from the standard library. 
Also the error using the button twice will be a runtime error, not a compile 
time error.


3)
container.add(std::make_unique<Gtk::Button>("a button"));
auto button = container.get();
button.set_label("text");

Which type will button be? As programmer, I want it to be a Button* or 
comparable. I do not think, it is possible to return the exact type without 
specifying it a second time like
auto button = container.get<Gtk::Button*>();


Diether

Attachment: signature.asc
Description: This is a digitally signed message part.



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]