C中的析构函数和构造函数
Destructor and constructor in C
我是 C 的新手,我正在尝试完全理解它。我实现了一个堆栈
但是在构造它的析构函数时发现了麻烦 constructor/init。
这些做得好吗?
这些是堆栈使用的结构的类型定义:
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);
}
我的问题是:他们做得好吗?有经验的人会怎么做?
newStack
应该只是 return 它分配的堆栈指针。它不需要接收 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
,因为内存即将消失,它包含的值无关紧要。
我是 C 的新手,我正在尝试完全理解它。我实现了一个堆栈 但是在构造它的析构函数时发现了麻烦 constructor/init。 这些做得好吗? 这些是堆栈使用的结构的类型定义:
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);
}
我的问题是:他们做得好吗?有经验的人会怎么做?
newStack
应该只是 return 它分配的堆栈指针。它不需要接收 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
,因为内存即将消失,它包含的值无关紧要。