在C++中,new
運算符可以被重載,以提供自定義的內存分配行為。重載 new
運算符的函數原型如下:
void* operator new(std::size_t size) throw(std::bad_alloc);
此外,還可以重載 new[]
運算符(用于分配數組)和 delete
/delete[]
運算符(用于釋放內存)。這些重載函數的原型如下:
// new
void* operator new(std::size_t size) throw(std::bad_alloc);
void* operator new[](std::size_t size) throw(std::bad_alloc);
// delete
void operator delete(void* ptr) noexcept;
void operator delete[](void* ptr) noexcept;
注意,從C++11開始,拋出異常的重載版本已被棄用,建議使用不拋出異常的版本。不拋出異常的版本如下:
// new
void* operator new(std::size_t size) noexcept(true);
void* operator new[](std::size_t size) noexcept(true);
// delete
void operator delete(void* ptr) noexcept;
void operator delete[](void* ptr) noexcept;
此外,還可以為類重載 new
/delete
運算符,這樣就可以為該類的對象提供自定義的內存分配行為。類成員重載函數的原型如下:
class MyClass {
public:
// new
static void* operator new(std::size_t size) noexcept(true);
static void* operator new[](std::size_t size) noexcept(true);
// delete
static void operator delete(void* ptr) noexcept;
static void operator delete[](void* ptr) noexcept;
};
請注意,重載 new
/delete
運算符時,應確保正確處理內存分配和釋放,以避免內存泄漏和其他問題。