01/10/2018, 11:30

Override và Overload operator new/delete trong C++ để làm gì?

Source code em đang đọc có một số class override lại operator new, delete. Em không biết tại sao lại cần phải override lại để làm gì?
Cao nhân nào có thể chỉ giúp em mục đích của việc override này được không?

Duy Nguyen viết 13:32 ngày 01/10/2018

Vấn đề bạn đang nói liên quan đến một khái niệm gọi là “polymorphism” nghĩa là đa hình. Nói đại khái thế này: có một hàm ở lớp cha và bạn kế thừa từ lớp đó, nhưng ở lớp dẫn xuất bạn muốn khai triển hàm đó theo một cách khác dựa trên hàm có sẵn từ lớp cha để phục vụ cho mục đích gì đó, khi đó bạn sẽ sử dụng override(hay còn gọi là ghi đè) để định nghĩa lại hàm đó từ lớp cha sao cho phù hợp với mục đích của bạn ở lớp dẫn xuất.

 // C++ program for function overriding 
 #include <bits/stdc++.h>
using namespace std;
// Base class
class Parent
{
public:
void print()
{
    cout << "The Parent print function was called" << endl;
}
 };

 // Derived class
     class Child : public Parent
     {
public:     
// definition of a member function already present in Parent
void print()
{
    cout << "The child print function was called" << endl;
}   
};

 //main function
   int main() 
 {
     //object of parent class
 Parent obj1;
 
//object of child class
Child obj2;
 
 
// obj1 will call the print function in Parent
obj1.print();
 
// obj2 will override the print function in Parent
// and call the print function in Child
obj2.print();
return 0;
} 

Output:

The Parent print function was called
The child print function was called

Như bạn thấy ở đoạn code trên, thì hàm print đã được override hay ‘ghi đè’ lại ở lớp dẫn xuất của nó.
Nguồn tham khảo từ : http://www.geeksforgeeks.org/polymorphism-in-c/

Student X viết 13:43 ngày 01/10/2018

Vấn đề của em không phải là cái OOP này. vấn đề của em là tại sao lại cần phải override lại hàm “new” - cái để khởi tạo đối tượng cho con trỏ ấy ạ. cái operator “new” của C++ ý ạ.
Xin lỗi vì k thể upload code lên. do vấn đề bảo mật của công ty.

đại khái n thế này:

class A{
public:
void* operator new(size_t);
}
Bác hiểu ý em chứ?

Dark.Hades viết 13:42 ngày 01/10/2018

Cái này chắc là nên đọc trực tiếp từ trong document của nó để tham khảo công dụng, chứ mình cũng chưa từng nghĩ tới khi nào nên dùng nó:
http://en.cppreference.com/w/cpp/memory/new/operator_new

Student X viết 13:32 ngày 01/10/2018

Thanks bác nhiều!!!

rogp10 viết 13:38 ngày 01/10/2018

Công dụng đầu tiên mình nghĩ đến là để thiết lập customized allocator, đứng ra xin 1 mảng (!= array) lớn mem rồi phát cho chương trình của mình để đảm bảo tính realtime, phát hiện mem leak.

Student X viết 13:46 ngày 01/10/2018

Dạ. vấn đề leak mem thì chỉ cần Dev để ý kỹ là đc (1 đội test sẽ lo chuyện có leak hay không). còn đứng ra xin 1 mảng động thì em nghĩ việc này “new” n đã đủ tốt rồi ạ

rogp10 viết 13:38 ngày 01/10/2018

còn đứng ra xin 1 mảng động thì em nghĩ việc này “new” n đã đủ tốt rồi ạ

stackoverflow.com
Nicol Bolas

What is the benefit of overloading 'new' and 'delete' for custom memory allocation in game engines?

c++, memory-management, game-engine
answered by Nicol Bolas on 09:50PM - 18 Jul 12
Bài liên quan
0