Tôi đã được hỏi điều này trong một cuộc phỏng vấn gần đây, về cơ bản viết một hàm để kết hợp các chức năng miễn phí và gán null. Tôi trả lời theo cách sau đây:Viết hàm để giải phóng con trỏ và gán nó NULL
void main()
{
int *ptr;
ptr = new int;
ptr = newdelete(ptr);
}
(int*) newdelete (int *ptr)
{
delete(ptr);
return NULL;
}
Vì vậy, sau khi thực hiện, các địa phương để ptr
main
sẽ giữ giá trị null như tôi đang trở về nó từ newdelete
chức năng. Nếu tôi vừa chỉ định NULL
trong hàm newdelete, thì ptr
địa phương thành newdelete
sẽ bị hủy và không phải là ptr
địa phương thành main
.
Tôi nghĩ giải pháp của tôi là chính xác, người phỏng vấn cũng chấp nhận nó. Tuy nhiên, anh đang chờ đợi một số câu trả lời khác. Ông đã nhấn mạnh tôi không trả lại NULL
từ chức năng và vẫn đạt được kết quả mong muốn.
Có cách nào để thực hiện điều đó không? Tất cả những gì tôi có thể nghĩ đến là vượt qua một đối số khác là con trỏ đến con trỏ ptr
địa phương đến main
, nhưng tôi không thấy lý do tại sao nó tốt hơn so với những gì tôi đã làm!
Tôi đoán bạn có nghĩa là 'new int' vì' New' không phải là toán tử 'C++' được định nghĩa. – ereOn
Chuyển một tham chiếu đến con trỏ. –
http://stackoverflow.com/questions/1265666/reason-why-not-to-have-a-delete-macro-for-c/1265681#1265681 – Goz