При следующем od ucial_ptr с Custom Deleter As Class Member Я обнаружил, что интеллектуальные указатели уже были реализованы для Glib как g_autoptr - см. Glib - Автоматическая очистка для деталей. Вместо: < /p>
При следующем od ucial_ptr с Custom Deleter As Class Member Я обнаружил, что интеллектуальные указатели уже были реализованы для Glib как g_autoptr - см. Glib - Автоматическая очистка для деталей. Вместо: < /p> [code]#include #include
GError* error = nullptr; std::unique_ptr conn(g_bus_get_sync(G_BUS_TYPE_SYSTEM, nullptr, &error), &g_object_unref); if (!conn) { print"Couldn't get bus: %s", error ? error->message : "unknown error"); g_clear_error(&error); } < /code> Я могу просто сделать: < /p> #include
g_autoptr(GError) error = nullptr; g_autoptr(GDBusConnection) conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, nullptr, &error); if (!conn) { print"Couldn't get bus: %s", error ? error->message : "unknown error"); } < /code> Но если я попытаюсь сделать это как часть класса: < /p> #include
class YourClass { YourClass(); ~YourClass();
... private: g_autoptr(GDBusConnection) _conn; };
YourClass::YourClass() { g_autoptr(GError) error = nullptr; _conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, nullptr, &error); if (!_conn) { print"Couldn't get bus: %s", error ? error->message : "unknown error"); } } < /code> Я получаю ошибку от GCC: < /p> error: 'cleanup' attribute ignored [-Werror=attributes] | g_autoptr(GDBusConnection) _conn; [/code] Можно ли g_autoptr не использовать в объявлении класса?