溫馨提示×

C++中new()的重載方法有哪些

c++
小樊
84
2024-09-06 07:16:59
欄目: 編程語言

在C++中,new 運算符可以被重載,以提供自定義的內(nèi)存分配行為。重載 new 運算符的函數(shù)原型如下:

void* operator new(std::size_t size) throw(std::bad_alloc);

此外,還可以重載 new[] 運算符(用于分配數(shù)組)和 delete/delete[] 運算符(用于釋放內(nèi)存)。這些重載函數(shù)的原型如下:

// 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 運算符,這樣就可以為該類的對象提供自定義的內(nèi)存分配行為。類成員重載函數(shù)的原型如下:

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 運算符時,應(yīng)確保正確處理內(nèi)存分配和釋放,以避免內(nèi)存泄漏和其他問題。

0