2014-12-21 3 views
-1
나는 C++의 delete 연산자를 오버로딩 된

, 나는 이것에 대한 free()을 사용 :과부하 C++에서 연산자를 삭제는

class A 
{ 
private: 
    int x; 
    int y; 
public: 
    void operator delete(void* ptr) 
    { 
     free(ptr); 
    } 

    void operator delete[](void* ptr) 
    { 
     free(ptr); 
    } 
} 

int main() 
{ 
    A *a = new A(); 
    A *b = new A[10]; 

    delete a; // This should free 8 bytes 
    delete b; // This also 8 only 

    delete[] b;// This should free 80 bytes 

    return 0; 
} 

방법을 무료로이 작업을 수행하십시오

할당 어떤 크기 숨김으로 내가 동적 할당 매장을 아시는 바와 같이

그래서 할당 해제하는 동안 거기에서 사용하는 동안

을 사용하지만 우리가 delete b; 또는 delete[] b;을 사용할 때 숨겨진 할당은 alwyas 80을 말하면 어떻게 8은 할당 취소 만됩니다.

올바른 방법이 아니라면 우리는 어떻게 연산자를 무료로 삭제할 수 있습니까? 정의되지 않은 동작 결과 (일종의 T 일부 유형에 대해 n) new T[n] obrained으로 사용 된 포인터 delete array 사용

+0

첫째로, 이들은 과부하가 아니라 대체물입니다. 또한 사용자는'operator delete()'의 커스텀 버젼을'operator new()'의 커스텀 버젼과 일치시킬 필요가 있습니다. –

+0

@Peter 여러분의 의견이 반갑지 않길 바랍니다. ;-) –

답변

3

.

0

delete b은 또한 당신이 정의되지 않은 동작이 발생할 수있는 장소 delete [] bdelete b를 사용 delete[] b

에서 예상대로 할당 된 크기를 알고있다. 놓치지 않는 부분은 delete []를 사용하지 않으면 배열의 개별 객체의 소멸자가 호출되지 않는다는 것입니다.

이전 답변을 여러 번 반복하는 대신 StackOverflow에서 검색하십시오. 여기

하나이다 delete vs delete[] operators in C++

0

newdelete 조작의 밀 결합 쌍이다. 동일한 객체 할당 체계의 두 부분이기 때문에 하나만 오버로드하는 것은 올바르지 않습니다.

기본 new 및 delete 구현은 표준에서 지정되지 않으므로 구현 정의됩니다.

일 수 있으며, 기본값은 시스템에 메모리를 할당하기 위해 malloc()을 사용하지만 그럴 수는 없습니다.

관련 문제