Notice
Recent Posts
Recent Comments
Link
- 책_곽용재님 홈페이지
- 책_노란북 - 책 가격비교
- 책_김재우-SICP번역
- 플밍_쏘쓰포지
- 플밍_CodingHorror ?
- 플밍_상킴
- 플밍_김민장님
- GPGStudy
- 플밍_미친감자님
- 플밍_jz
- 플밍_샤방샤방님
- 플밍_글쓰는프로그래머2
- 플밍_키보드후킹
- 사람_재혁
- 사람_kernel0
- 사람_박PD
- 사람_경석형
- 사람_nemo
- 사람_kikiwaka
- 사람_Junios
- 사람_harry
- 사람_어떤 개발자의 금서목록..
- 사람_모기소리
- 사람_낙타한마리
- 사람_redkuma
- 사람_영원의끝
- 사람_민식형
- 도스박스 다음카페
- 플레이웨어즈 - 게임하드웨어벤치마크
- http://puwazaza.com/
- David harvey의 Reading Marx's c…
- 씨네21
- 한겨레_임경선의 이기적인 상담실
- 본격2차대전만화 - 굽시니스트
- 영화_정성일 글모음 페이지
- 영화_영화속이데올로기파악하기
- 음식_생선회
- 죽력고
- 사람_한밀
- 플밍_수까락
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 진삼국무쌍5
- 고전강의
- modernc++
- 강유원
- programming challenges
- 게임
- 고등학교 사회공부
- 유시민
- 삼국지6
- 태그가 아깝다
- 단상
- 정신분석
- 삼국지
- 건강
- 소비자고발
- 프로그래밍
- 책
- 유머
- 인문학
- 노무현
- 진중권
- BSP
- 일리아스
- 영화
- template
- c++
- Programming
- 김두식
- 정성일
- stl
Archives
- Today
- Total
01-05 01:43
lancelot.com
new 본문
- new / delete
#include<iostream>
class Point
{
int x, y, z;
public:
Point(int a, int b, int c) : x{ a }, y{ b }, z(c) { std::cout << "Point()" << std::endl; }
~Point() { std::cout << "~Point()" << std::endl; }
};
int main()
{
Point* p1 = new Point(1, 2, 3);
delete p1;
void* p = operator new(sizeof(Point)); // 1. 메모리할당
Point* p2 = new(p) Point(1, 2, 3 ); // 2. 생성자 호출
std::cout << p<< std::endl;
p2->~Point(); // 1. 소멸자호출
operator delete(p); // 2. 메모리 해지
}
- 생성자의 명시적 호출
#include<iostream>
#include<memory>
class Point
{
int x, y, z;
public:
Point(int a, int b, int c) : x{ a }, y{ b }, z(c) { std::cout << "Point()" << std::endl; }
~Point() { std::cout << "~Point()" << std::endl; }
void set() { std::cout << x <<", "<< y <<", " << z << std::endl; }
};
int main()
{
void* p1 = operator new(sizeof(Point)); // 1. 메모리할당
Point* p2 = new(p1) Point(1, 2, 3 ); // 2. 생성자 호출
operator delete(p1);
Point* p3 =static_cast<Point*>(operator new(sizeof(Point)));
std::construct_at(p3, 1, 2, 3);
operator delete(p3);
}
- 객체를 생성/파괴 하는 방법
- 방법 1. new / delete 사용
- 방법 2. 메모리 할당과 생성자 호출을 분리
- 왜 메모리 할당과 생성자 호출을 분리하는가?
- new Point[3];
- Point 타입에는 반드시 디폴트 생성자가 있어야 한다.
- 디폴트 생성자가 없다면 에러.
- new Point[3]{ {0,0}, {0,0}, {0,0} };
- C++11 부터 가능
- 3개가 아니라 개수가 커진다면?
- 메모리 할당과 생성자 호출을 분리하면 편리하다.
- new Point[3];
- vector 와 placement new
#include<iostream>
#include<vector>
struct X
{
X() { std::cout << __FUNCSIG__<<" get resource" << std::endl; }
~X() { std::cout << __FUNCSIG__<<" release resource" << std::endl; }
};
int main()
{
std::vector<X> v(10);
std::cout << "----------" << std::endl;
v.resize(7);
std::cout << "----------" << std::endl;
std::cout << v.size()<< std::endl;
std::cout << v.capacity() << std::endl;
std::cout << "----------" << std::endl;
v.resize(8);
std::cout << "----------" << std::endl;
std::cout << v.size() << std::endl;
std::cout << v.capacity() << std::endl;
}