[C++] Empty class
1. empty class
- non static 멤버 데이터가 없는 클래스
#include <iostream>
using namespace std;
struct AAA
{
};
int main()
{
AAA aaa;
cout << sizeof(AAA) << endl; // 1 Empty 클래스의 크기는 1바이트
}
2. std::nothrow
- 메모리 할당 실패 시 예외(std::bad_alloc) 전달
- empty class type으로 throwing 과 non-throwing 할당 함수의 overloads를 명확히 하는 데 사용
#include <iostream>
using namespace std;
// new : 메모리 할당 실패 시 예외(std::bad_alloc) 전달
void* operator new(size_t sz)
{
void* p = malloc(sz);
if (p == nullptr)
throw std::bad_alloc();
return p;
}
// 오버로딩만을 위한 타입이 필요할 때 empty 많이 사용
struct xnothrow_t {};
xnothrow_t xnothrow;
//실패 시 0을 반환하는 버전
void* operator new(size_t sz, xnothrow_t)
{
void* p = malloc(sz);
return p;
}
int main()
{
int* p1 = new(xnothrow) int; // 실패시 0 반환
if (p1 == nullptr) {}
else
delete p1;
}
#include <iostream>
#include <new>
int main()
{
try {
while (true) {
new int[100000000ul]; // throwing overload
}
} catch (const std::bad_alloc& e) {
std::cout << e.what() << '\n';
}
while (true) {
int* p = new(std::nothrow) int[100000000ul]; // non-throwing overload
if (p == nullptr) {
std::cout << "Allocation returned nullptr\n";
break;
}
}
}
참고
codenuri 강석민 강사 강의 내용기반으로 정리한 내용입니다.
코드누리
cppreference
This is personal diary for study documents.
Please comment if I'm wrong or missing something else 😄.
댓글남기기