operator new 연산자.

보물창고·2022년 5월 10일
0

operator new 연산자.

: 메모리만 할당함.

placement new

: 생성자만 호출함.

코드

: Point 클래스의 경우, (디폴트 생성자 없음.)
-> new 연산자로는 10개 할당 불가능함.

#include <stdio.h>

#include <iostream>
using namespace std;

class Point
{
private : 
	int x_, y_;
public : 
	Point() { cout << "base constr" << endl; }

	Point(int _x = 0, int _y = 0) 
		: x_(_x), y_(_y)
	{
		cout << "constr" << endl;
	}

	~Point()
	{
		cout << "destr" << endl;
	}
};

//void* operator new(size_t sz)
//{
//	cout << "wontae" << endl;
//	return malloc(sz);
//}

int main()
{
	// 1. 메모리 10개의 공간만 확보함.
	Point *p = static_cast<Point *>(operator new(sizeof(Point) * 10));
	
	// 2. 생성자를 명시적으로 10번 호출함.
	for (int i = 0; i < 10; i++)
	{
		new (&p[i]) Point(2, 2);
	}

	// 3. 소멸자를 명시적으로 10번 호출함.
	for (int i = 0; i < 10; i++)
	{	
		p->~Point();
	}

	// 4. 메모리 해제
	operator delete (p);

}

profile
🔥🔥🔥

1개의 댓글

comment-user-thumbnail
2022년 5월 10일

안녕하세요 혹시 몇가지 궁금한점이 있는데 메일알 수 있을까요

답글 달기