C получить все ссылки на объект? - PullRequest
0 голосов
/ 12 февраля 2012

Если у меня есть объект atype obj, где atype определен как typedef struct myType {...} * atype, есть ли способ получить все ссылки на obj или хотя бы сколько их есть?

Что-то вроде:

atype obj;
... // Allocate

aStruct a;
a.obj = obj;

aStruct b;
b.obj = obj;

int refs = get_references(obj); // refs should now = 2

Есть идеи?Обходные пути и альтернативные методы приветствуются.

1 Ответ

2 голосов
/ 12 февраля 2012

Нет, нет неявного пути. Но вы могли бы реализовать функцию ref, которая автоматически увеличивает счетчик, и функцию unref, чтобы уменьшить его.

a.obj = ref(obj);

/* ... */
a.obj = something_else;
unref(obj);

И этот счетчик может быть чем-то внешним для любого из struct s. Например, вы можете использовать хеш-таблицу для отслеживания отношений указатель - счетчик.

EDIT

Вы также можете посмотреть на gobject, который предоставляет это через g_object_ref / g_object_unref.

...