C中的析构函数和构造函数

时间:2016-05-12 23:34:28

标签: c initialization destructor

我对C很陌生,我还在努力完全理解它。我实现了一个堆栈 但是在制作析构函数和构造函数/ init时遇到了麻烦。 这些做得好吗? 这些是堆栈使用的结构的typedef:

typedef struct Node{
    void* cargo;
    struct Node* next;
}Node;

typedef struct Stack{
    int size;
    Node* firstOut;
}Stack;

这些是功能:

void newStack(Stack* stack){
    stack = (Stack*)malloc(sizeof(Stack));
    stack->firstOut = NULL;
    stack->size = 0;
}

void freeStack(Stack** stack){
    empty((*stack));
    free((*stack)->top);
    (*stack)->size = 0;
    free(stack);
}

我的问题是:他们干得好吗?具有适当经验的人会如何做到这一点?

1 个答案:

答案 0 :(得分:3)

newStack应该只返回它分配的堆栈指针。它不需要接收Stack*作为参数。

stack *newStack() {
    Stack *stack = malloc(sizeof(Stack));
    if (stack != NULL) { // allocation successful
        stack->firstOut = NULL;
        stack->size = 0;
    }
    return stack;
}

freeStack应该接收一个堆栈指针作为参数,它不需要双重间接。

void freeStack(Stack *stack) {
    empty(stack);
    free(stack->firstOut); // This isn't done by empty()?
    free(stack);
}

在释放之前不需要设置stack->size,因为内存将会消失并且它包含的值无关紧要。