По крайней мере, необычно помещать функции в структуру языка Си.Поскольку C не будет автоматически передавать указатель this
, вам придется использовать что-то вроде
struct Tree *tree;
...
struct Tree *tree2 = tree->clone(tree); // same as directly calling: clone(tree)
. Обычно оно используется только для реализации виртуальных функций, что означает, что функция может зависетьдля объекта, который является очень необычным случаем использования - он обычно зависит от группы объектов, и из-за этого у объекта есть только указатель на vTable, который является своего рода массивом функций.
Как говорится в C, правило таково: сначала уничтожить членов, затем освободить объект, поэтому здесь, если это может быть более или менее
void delete(Tree &tree) {
// destroy and free descendants of root
...
// destroy and free root
...
free(tree);
}