首页 > 解决方案 > 是否为使用“gtk_list_store_newv”创建的对象分配了“新”的内存

问题描述

我使用 GTK 创建带有按钮、列表等的 GUI。在某些类中,我有 GtkListStore* 类型的私有成员,我使用 'gtk_list_store_newv' 来初始化这些指针。函数 'gtk_list_store_newv' 创建新的 GtkListStore 并返回 GtkListStore*。GTK 文档说“返回一个新的 GtkListStore”。新创建对象的内存是用“new”运算符创建的吗?如果是这样,那么我是否应该使用“删除”显式释放,例如在自定义对象析构函数中?

class What {
  public:
    What();
    ~What();
  private:
    GtkListStore* whatWhat;
};

// this constructor uses 'gtk_list_store_newv' to initialize the member
What::What() {
  // some variables to define input arguments for the function
  whatWhat = gtk_list_store_newv(// the arguments here...);
}

// SHOULD THIS EXPLICIT DESTRUCTOR USE 'delete'
What::~What() {
  delete whatWhat;  // do I need this 'delete' to release memory
}

仅作记录,当我以这种方式使用“删除”时,不会发生崩溃,也不会出现任何警告。

标签: gtk

解决方案


不,GtkListStore 是 的子类GObject,并且 GObjects 是引用计数的。采用g_object_unref(whatWhat);

delete可能对你有用,但这只是巧合。它会在某个地方崩溃。


推荐阅读