30/09/2018, 18:44
[C++] malloc và new khác nhau như thế nào?
Như tiêu đề ạ, em biết malloc và new đều đc dùng để xin cấp phát bộ nhớ, nhưng em chỉ hiểu và dùng thành thạo new chứ malloc thì chưa hiểu lắm, mọi người giải thích giúp em với ạ.
Giả sử trong code Stack này thì chuyển malloc sang new đc ko?
quan tâm hàm makenode và push thôi ạ
struct Stack
{
int data;
Stack *next;
Stack *top;
};
void setUp(Stack &S); //khoi tao stack
int isEmpty(Stack S); //kiem tra stack rong
int length(Stack S); //kiem tra do dai
Stack *makeNode(int x){ //Khoi tao node
Stack *p = (Stack*) malloc(sizeof(Stack));
p->next = NULL;
p->data = x;
return p;
}
void push(Stack &S, int x){ //Them phan tu
Stack *p = makeNode(x);
p->next = S.top;
S.top = p;
}
int pop(Stack &S); //Lay phan tu cuoi cung
void input(Stack &S);
void output(Stack S);
int main(){
// something...
}
Bài liên quan
malloc là hàm cấp phát bộ nhớ của C, muốn giải phóng bộ nhớ đã cấp phát bằng malloc phải dùng hàm free, nếu không dùng thì dễ bị rò bộ nhớ.
new là toán tử cấp phát bộ nhớ của C++, giải phóng nó dùng delete. new còn có khả năng tạo mới 1 đối tượng (object) kèm theo gọi constructor của đối tượng đó, còn malloc không hỗ trợ do C không phải là Object-oriented language.
Có cách nào để malloc thay thế cho new trong OOP không nhỉ
Không thích xài new thì cứ xài malloc thôi.
ko thích xài C++ cứ xài C thôi
rõ ràng
Stack *p = (Stack*) malloc(sizeof(Stack));
dễ xài và dễ nhớ hơn nhiều so với
Stack *p = new Stack;
Mình tưởng malloc là hàm cấp phát bộ nhớ, còn new là toán tử khởi tạo thực thể?
nhưng malloc lại không tạo ra một object mới được, cũng như không gọi được hàm constructor
New là tạo con trỏ, thực thể trong C++ không cần new, chỉ gọi ra là nó có thực thể: