小编gli*_*tto的帖子

破坏Glib :: RefPtr导致GTK 3核心中的断言失败

从gtkmm的这些家伙都比较 Glib::RefPtrstd::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)

c++ gtk memory-management gtkmm gtk3

7
推荐指数
2
解决办法
858
查看次数

标签 统计

c++ ×1

gtk ×1

gtk3 ×1

gtkmm ×1

memory-management ×1