Em có hai đoạn code:
#include <iostream>
using namespace std;
int main()
{
int *ptr = new int;
cin >> *ptr;
cout << *ptr << " at: " << ptr << endl;
delete ptr;
return 0;
}
và:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int num = 0;
cin >> num;
int* myptr = new int[num];
cout << myptr << endl;
delete[] myptr;
return 0;
}
Tại sao đoạn code 1 là new
còn đoạn 2 là new[]
, em có thể tạm hiểu , có thể vì đoạn 1 khai báo giá trị trực tiếp lên pointer, còn đoạn 2 là gán lên 1 var khác, sau đó từ var khác đó gán lên pointer nên có syntax khác. Và liệu chúng cùng chức năng nhưng syntax khác hay còn có ẩn tình gì không
Còn về hàm delete
và delete[]
thì em không hiểu lắm. Chức năng của chúng khác nhau ở chỗ nào? Em đọc trong sách thì có thể tạm hiểu là delete chỉ có thể release memory ở những address đã được return bằng new
. Còn delete[]
thì release hết bộ nhớ của chương trình. Nhưng em không chắc cho lắm.
Mong được các anh giảng giải thêm về phần này.