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...
}
Phạm Văn Đại viết 20:58 ngày 30/09/2018

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ông Tuyền Lê viết 20:44 ngày 30/09/2018

Có cách nào để malloc thay thế cho new trong OOP không nhỉ

明玉 viết 20:54 ngày 30/09/2018

Không thích xài new thì cứ xài malloc thôi.

viết 20:59 ngày 30/09/2018

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;

Trần Hoàn viết 20:57 ngày 30/09/2018

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ể?

Công Tuyền Lê viết 20:52 ngày 30/09/2018

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

Dark.Hades viết 20:51 ngày 30/09/2018

còn new là toán tử khởi tạo thực thể?

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ể:

Stack stackObj; // Đã xong construct
Bài liên quan
0