다음을 통해 공유


operator new (<new>)

개별 개체에 대해 저장소를 할당하기 위해 새로운 식에서 호출되는 함수입니다.

void* operator new(
   std::size_t _Count
) throw(bad_alloc);
void* operator new(
   std::size_t _Count,        
   const std::nothrow_t&
) throw( );
void* operator new(
   std::size_t _Count, 
   void* _Ptr
) throw( );

매개 변수

  • _Count
    할당할 저장소의 바이트 수입니다.

  • _Ptr
    반환 되는 포인터입니다.

반환 값

새로 할당된 저장소에서 가장 낮은 바이트 주소의 포인터입니다.또는_Ptr.

설명

첫 번째 함수를 할당 하는 새 식으로 라고 _Count 바이트의 저장소를 적절 하 게 맞춤 크기의 모든 개체를 표시 합니다.프로그램은 표준 C++ 라이브러리에서 정의 된 기본 버전을 대체 하며 교체 될 수 있으므로이 함수 시그니처가 대체 함수를 정의할 수 있습니다.

필요한 동작은 저장소의 요청에 따라 할당 될 수 있습니다 경우에 null이 아닌 포인터를 반환할 것입니다.이러한 각 할당 포인터 할당 된 다른 저장소에서 분리 된 저장소를 생성합니다.순서와 연속 호출에 의해 할당 된 저장소를 인접 성은 지정한입니다.저장 된 초기 값이 지정 되지 않습니다.반환 된 포인터에 할당 된 저장소의 시작 (최하위 바이트 주소)를 가리킵니다.Count가 0 이면 반환 값 함수가 반환한 값 같지 않습니다.

기본 동작은 루프가 실행 됩니다.루프 내에서 함수는 먼저 요청 된 저장소를 할당할 시도 합니다.호출 하는 시도 리디렉션의 한 여부 malloc(size_t) 지정 되어 있지 않습니다.실패 하는 경우 함수 포인터 할당 된 저장소를 반환 합니다.그렇지 않으면 함수는 지정 된 호출 새 처리기.호출된 되는 함수를 반환 하면 루프를 반복 합니다.요청 된 저장소를 할당 하는 데 성공 하면 또는 호출된 된 함수가 반환 되지 않는 경우 루프를 종료 합니다.

새 처리기의 동작을 필요 다음 작업 중 하나를 수행 하는 것:

  • 더 많은 저장 공간 할당을 사용할 수 있도록 하 고 반환 합니다.

  • Call either abort or exit(int).

  • 형식의 개체를 throw bad_alloc.

기본적으로는 새 처리기 형식의 개체를 throw 하는 것 bad_alloc.Null 포인터 기본 새 처리기를 지정합니다.

순서와 연속 호출에 의해 할당 된 저장소를 인접 성은 operator new(size_t) 저장 된 초기 값으로 지정 되지 않습니다.

두 번째 함수 호출 배치 새 식으로 할당할 수 _Count 바이트의 저장소를 적절 하 게 맞춤 크기의 모든 개체를 표시 합니다.프로그램은 표준 C++ 라이브러리에서 정의 된 기본 버전을 대체 하며 교체 될 수 있으므로이 함수 시그니처가 대체 함수를 정의할 수 있습니다.

기본 동작을 반환 하는 것 operator new(_Count) 해당 함수가 성공적으로 실행 하는 경우.그렇지 않은 경우 null 포인터를 반환합니다.

세 번째 함수를 배치 하 라고 형태의 식 (args) t.여기에서 args 단일 개체 포인터의 구성 됩니다.이 개체에 알려진된 주소를 구성 하는 데 유용할 수 있습니다.함수 반환 _Ptr.

저장소 할당 늘리려면 operator new을 호출 delete 연산자.

Throw 하는 방법에 대 한 나 새, 참조 동작 nonthrowing 새 연산자를 삭제 하 고.

예제

// new_op_new.cpp
// compile with: /EHsc
#include<new>
#include<iostream>

using namespace std;

class MyClass 
{
public: 
   MyClass( )
   {
      cout << "Construction MyClass." << this << endl;
   };

   ~MyClass( )
   {
      imember = 0; cout << "Destructing MyClass." << this << endl;
   };
   int imember;
};

int main( ) 
{
   // The first form of new delete
   MyClass* fPtr = new MyClass;
   delete fPtr;

   // The second form of new delete
   MyClass* fPtr2 = new( nothrow ) MyClass;
   delete fPtr2;

   // The third form of new delete
   char x[sizeof( MyClass )];
   MyClass* fPtr3 = new( &x[0] ) MyClass;
   fPtr3 -> ~MyClass();
   cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
}

예제 출력

Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.0023FC60
Destructing MyClass.0023FC60
The address of x[0] is : 0023FC60

요구 사항

헤더: <new>

네임 스페이스: std

참고 항목

참조

new operator (STL Samples)

nothrow_t Structure

operator delete (<new>)