从gtkmm的这些家伙都比较 Glib::RefPtr有std::auto_ptr<>:
Glib::RefPtr是一个智能指针.具体来说,它是一个参考计数智能指针.您可能熟悉std::auto_ptr<>,这也是一个智能指针,但Glib::RefPtr<>更简单,更有用.
但由于一些奇怪的原因,我无法完成我的工作RefPtr.相同的代码就好了auto_ptr.
在下面的代码中,SmartPtr只是这两个智能指针之一的占位符.
#include <gtkmm.h>
#include <iostream>
#include <tr1/memory>
struct WindowHolder {
SmartPtr<Gtk::Window> ptr;
WindowHolder()
: ptr(new Gtk::Window)
{
ptr->signal_delete_event().connect(sigc::mem_fun(*this, &WindowHolder::reset));
ptr->show_all();
}
bool reset(GdkEventAny* event)
{
Gtk::Main::quit();
}
};
int main(int argc, char *argv[])
{
Gtk::Main kit(argc, argv);
WindowHolder w;
kit.run();
}
Run Code Online (Sandbox Code Playgroud)
在编译时,我首先定义SmartPtr为as Glib::RefPtr然后定义为std::auto_ptr.
$ g++ '-DSmartPtr=Glib::RefPtr' `pkg-config --cflags --libs gtkmm-3.0` main.cc && ./a.out
(main:22093): GLib-GObject-CRITICAL **: …Run Code Online (Sandbox Code Playgroud)