<new>
연산자 및 열거형
enum align_val_t
enum class align_val_t : size_t {};
operator delete
개별 개체에 대한 delete
스토리지 할당을 취소하기 위해 식에서 호출하는 함수입니다.
void operator delete(void* ptr) noexcept;
void operator delete(void *, void*) noexcept;
void operator delete(void* ptr, const std::nothrow_t&) noexcept;
매개 변수
ptr
삭제에 의해 값이 무효 처리되는 포인터입니다.
설명
첫 번째 함수는 식에 delete
의해 호출되어 잘못된 값을 ptr
렌더링합니다. 프로그램은 C++ 표준 라이브러리를 통해 정의되는 기본 버전을 바꾸는 함수를 이 함수 시그니처로 정의할 수 있습니다. 필요한 동작은 이전 nullptr
호출에서 반환된 값을 ptr
수락하는 것입니다operator new
.
값 ptr
의 nullptr
기본 동작은 아무 작업도 수행하지 않는 것입니다. 다른 값은 ptr
앞에서 설명한 대로 호출에서 이전에 반환한 new
값이어야 합니다. null이 아닌 값의 ptr
기본 동작은 이전 호출에서 할당한 스토리지를 회수하는 것입니다. 이러한 회수된 스토리지의 일부 또는 전부가 후속 호출 operator new
또는 calloc
malloc
realloc
함수에 의해 할당되는 조건에 따라 지정되지 않습니다.
두 번째 함수는 폼의 식에 해당하는 배치 delete
식에 new
의해 호출됩니다 new( std::size_t )
. 아무 작업도 수행하지 않습니다.
세 번째 함수는 폼의 식에 해당하는 배치 delete
식에 new
의해 호출됩니다 new( std::size_t, const std::nothrow_t& )
. 프로그램은 C++ 표준 라이브러리를 통해 정의되는 기본 버전을 바꾸는 함수를 이 함수 시그니처로 정의할 수 있습니다. 필요한 동작은 이전 nullptr
호출에서 반환되었거나 반환된 값을 ptr
수락하는 것입니다operator new
. 기본 동작은 .를 평가하는 delete( ptr )
것입니다.
예시
를 사용하는 operator delete
예제를 참조하세요operator new
.
operator delete[]
개체 배열에 delete
대한 스토리지 할당을 취소하기 위해 식에서 호출한 함수입니다.
void operator delete[](void* ptr) noexcept;
void operator delete[](void *, void*) noexcept;
void operator delete[](void* ptr, const std::nothrow_t&) noexcept;
매개 변수
ptr
삭제에 의해 값이 무효 처리되는 포인터입니다.
설명
첫 번째 함수는 ptr
의 값을 무효 처리하기 위해 delete[]
식에 의해 호출됩니다. 프로그램은 C++ 표준 라이브러리를 통해 정의되는 기본 버전을 바꾸는 함수를 이 함수 시그니처로 정의할 수 있으므로 함수는 교체 가능합니다. 필요한 동작은 이전 nullptr
호출에서 반환되었거나 반환된 값을 ptr
수락하는 것입니다operator new[]
. ptr
의 null 값에 대한 기본 동작은 아무 작업도 수행하지 않는 것입니다. 기타 모든 ptr
의 값은 앞에서 설명한 것처럼 호출을 통해 이전에 반환된 값이어야 합니다. null이 아닌 값의 ptr
기본 동작은 이전 호출에서 할당한 스토리지를 회수하는 것입니다. 이러한 회수된 스토리지의 일부 또는 전부가 후속 호출 operator new
또는 calloc
malloc
realloc
함수에 의해 할당되는 조건에 따라 지정되지 않습니다.
두 번째 함수는 폼의 식에 해당하는 배치 delete[]
식에 new[]
의해 호출됩니다 new[]( std::size_t )
. 아무 작업도 수행하지 않습니다.
세 번째 함수는 폼의 식에 해당하는 배치 delete[]
식에 new[]
의해 호출됩니다 new[]( std::size_t, const std::nothrow_t& )
. 프로그램은 C++ 표준 라이브러리를 통해 정의되는 기본 버전을 바꾸는 함수를 이 함수 시그니처로 정의할 수 있습니다. 필요한 동작은 이전 nullptr
연산new[]
자 호출에서 반환되었거나 반환된 값을 ptr
수락하는 것입니다. 기본 동작은 .를 평가하는 delete[]( ptr )
것입니다.
예시
사용 예제를 참조 operator new[]
하세요 operator delete[]
.
operator new
개별 개체에 대해 스토리지를 할당하기 위해 new 식에서 호출되는 함수입니다.
void* operator new(std::size_t count);
void* operator new(std::size_t count, const std::nothrow_t&) noexcept;
void* operator new(std::size_t count, void* ptr) noexcept;
매개 변수
count
할당할 스토리지의 바이트 수입니다.
ptr
반환할 포인터입니다.
반환 값
새로 할당된 스토리지의 가장 낮은 바이트 주소에 대한 포인터입니다. 또는 ptr
함수의 세 번째 형식을 사용하는 경우
설명
첫 번째 함수는 해당 크기의 개체를 new
나타내기 위해 적절하게 정렬된 스토리지 바이트를 할당 count
하기 위해 식에 의해 호출됩니다. 이 함수는 바꿀 수 있습니다. 즉, 프로그램에서 C++ 표준 라이브러리에 정의된 기본 버전을 대체하는 이 함수 시그니처를 사용하여 대체 함수를 정의할 수 있습니다.
필요한 동작은 요청된 대로 스토리지를 할당할 수 있는 경우에만 null이 아닌 포인터를 반환하는 것입니다. 이러한 각 할당에서는 할당된 다른 스토리지에서 스토리지를 분리하는 포인터가 생성됩니다. 연속 호출을 통해 할당되는 스토리지의 순서와 연속성은 지정되지 않습니다. 저장된 초기값은 지정되지 않습니다. 반환된 포인터는 할당된 스토리지의 시작(가장 낮은 바이트 주소)을 가리킵니다. 0이면 count
반환된 값이 함수에서 반환된 다른 값과 비교되지 않습니다.
기본 동작은 루프를 실행하는 것입니다. 루프 내에서 함수는 먼저 요청된 스토리지 할당을 시도합니다. 시도에 호출 malloc
이 포함되는지 여부는 지정되지 않습니다. 할당 시도가 성공하면 함수는 할당된 스토리지에 대한 포인터를 반환합니다. 그렇지 않으면 함수는 지정된 형식의 함수를 호출합니다 new_handler
. 호출된 함수가 반환되면 루프는 반복됩니다. 요청된 스토리지 할당 시도가 성공하거나 호출된 함수가 반환되지 않을 때 루프가 종료됩니다.
형식 new_handler
함수의 필수 동작은 다음 작업 중 하나를 수행하는 것입니다.
더 많은 스토리지를 할당 가능하도록 지정한 다음, 반환됩니다.
또는 을(를) 호출합니다
abort
exit
.형식
bad_alloc
의 개체를 throw합니다.
함수의 new_handler
기본 동작은 형식 bad_alloc
의 개체를 throw하는 것입니다. 값은 nullptr
기본 new_handler
함수를 지정합니다.
연속 호출 operator new
에 의해 할당된 스토리지의 순서 및 연속성은 초기 값과 마찬가지로 지정되지 않습니다.
첫 번째 형식 operator new
으로 할당된 스토리지를 해제하려면 .를 호출합니다 operator delete
.
두 번째 함수는 배치 new
식에 의해 호출되어 해당 크기의 개체를 나타내기 위해 적절하게 정렬된 스토리지 바이트를 할당 count
합니다. 이 함수는 바꿀 수 있습니다. 즉, 프로그램에서 C++ 표준 라이브러리에 정의된 기본 버전을 대체하는 이 함수 시그니처를 사용하여 대체 함수를 정의할 수 있습니다.
기본 동작은 해당 함수가 성공하면 반환 operator new( count )
하는 것입니다. 그 외의 경우 nullptr
를 반환합니다.
두 번째 형식 operator new
(즉, 반환 nullptr
되지 않은 경우)에 의해 할당된 스토리지를 해제하려면 .를 호출합니다 operator delete
.
세 번째 함수는 형식의 할당되지 않은 배치 new
식에 의해 호출됩니다 new ( ptr ) T
. 여기서는 ptr
단일 개체 포인터로 구성됩니다. 알려진 주소에서 개체를 생성하는 데 유용할 수 있습니다. 함수에서 ptr
을 반환합니다. 이 개체에서 소멸자를 명시적으로 호출해야 합니다.
할당되지 않은 배치 new
를 호출하는 경우 호출 delete
하지 마세요. 대신 개체의 소멸자를 호출한 후 필요한 경우 제공한 메모리에 대한 할당 취소자를 호출합니다.
throw 또는 throw하지 않는 동작new
에 대한 자세한 내용은 The new
및 delete
연산자를 참조하세요.
예시
// new_op_new.cpp
// compile with: /EHsc
#include<new>
#include<iostream>
using namespace std;
class MyClass {
int member{ 0 };
public:
MyClass() {
cout << "MyClass at 0x" << this << " constructed.\n";
};
~MyClass() {
cout << "MyClass at 0x" << this << " destroyed.\n";
};
};
int main( )
{
// The first form of new / delete
MyClass* fPtr1 = new MyClass;
delete fPtr1;
// The second form (fail returns nullptr) of new / delete
MyClass* fPtr2 = new(nothrow) MyClass[2];
if (fPtr2)
delete fPtr2;
// The third form (non-allocating placement) of new / delete
char x[sizeof(MyClass)]; // x is automatic
MyClass* fPtr3 = new(&x[0]) MyClass;
fPtr3->~MyClass(); // Requires explicit destructor call
// no delete because x is on the stack
}
operator new[]
개체 배열에 대해 스토리지를 할당하기 위해 new 식에서 호출되는 할당 함수입니다.
void* operator new[](std::size_t count);
void* operator new[](std::size_t count, const std::nothrow_t&) noexcept;
void* operator new[](std::size_t count, void* ptr) noexcept;
매개 변수
count
배열 개체에 대해 할당할 스토리지의 바이트 수입니다.
ptr
반환할 포인터입니다.
반환 값
새로 할당된 스토리지의 가장 낮은 바이트 주소에 대한 포인터입니다. 또는 ptr
세 번째 폼을 사용하는 경우
설명
첫 번째 함수는 count
바이트의 스토리지를 할당하기 위해 new[]
식에서 호출되며, 해당 크기 이하의 모든 개체를 나타내도록 적절하게 정렬됩니다. 프로그램은 C++ 표준 라이브러리를 통해 정의되는 기본 버전을 바꾸는 함수를 이 함수 시그니처로 정의할 수 있습니다. 필요한 동작은 에 대한 operator new
동작과 동일합니다. 기본 동작은 성공하면 반환 operator new( count )
하는 것입니다. 그렇지 않으면 예외(또는 파생된 예외)를 std::bad_alloc
throw합니다std::bad_alloc
. 이 형식으로 할당된 스토리지를 operator new[]
해제하려면 .를 호출합니다 operator delete[]
.
두 번째 함수는 count
바이트의 스토리지를 할당하기 위해 placement new[]
식에서 호출되며, 해당 크기의 모든 배열 개체를 나타내도록 적절하게 정렬됩니다. 프로그램은 C++ 표준 라이브러리를 통해 정의되는 기본 버전을 바꾸는 함수를 이 함수 시그니처로 정의할 수 있습니다. 기본 동작은 해당 함수가 성공하면 반환 operator new( count )
하는 것입니다. 그 외의 경우 nullptr
를 반환합니다. 이 형식으로 할당된 스토리지를 operator new[]
해제하려면 .를 호출합니다 operator delete[]
. throw 또는 throw하지 않는 동작new
에 대한 자세한 내용은 The new
및 delete
연산자를 참조하세요.
세 번째 함수는 형식의 할당되지 않은 배치 new[]
식에 의해 호출됩니다 new( ptr ) T[ N ]
. 이 양식은 메모리를 할당하지 않습니다. 매개 변수를 통해 전달된 메모리의 개체를 생성합니다 ptr
. 함수에서 ptr
을 반환합니다. 생성된 각 개체에 대해 소멸자를 명시적으로 호출해야 합니다. 에 충분한 메모리 ptr
를 제공할 책임이 있습니다. 식에서 반환 new
된 값에 대해 호출 delete[]
하지 마세요. 대신, 소멸자를 호출한 후 필요한 경우 할당을 취소 ptr
합니다.
예제
// new_op_array.cpp
// compile with: /EHsc
#include <new>
#include <iostream>
using namespace std;
class MyClass {
int member{ 0 };
public:
MyClass() {
cout << "MyClass at 0x" << this << " constructed.\n";
};
~MyClass() {
cout << "MyClass at 0x" << this << " destroyed.\n";
};
};
int main() {
// The first form of array new / delete
MyClass* fPtr1 = new MyClass[2];
delete[] fPtr1;
// The second form (fail returns nullptr) of array new / delete
MyClass* fPtr2 = new(nothrow) MyClass[2];
if (fPtr2)
delete[] fPtr2;
// The third form (non-allocating placement) of array new / delete
char x[2 * sizeof(MyClass) + sizeof(int)]; // x is automatic
MyClass* fPtr3 = new(&x[0]) MyClass[2];
fPtr3[1].~MyClass(); // Requires explicit destructor calls
fPtr3[0].~MyClass(); // Recommended in reverse construction order
// Don't delete[] fPtr3 here.
// delete[] &x[0] not required because x is on the stack
}