템플릿을 이용해서 Stack을 직접 구현하고 있음
template <typename T>
class Stack {
unsigned int capacity;
T* data;
...
}
Stack에 int나 float같은거 말고, 클래스를 push할때 capacity가 가득차있는 상태면
T* temp = new T[capacity * 2]; 하고 기존의 데이터(T* data)들을 temp[0]부터 temp[capacity]까지 넣는단 말이야
그 후 delete[] data; 해서 기존의 데이터들 지운 뒤 data = temp를 해서 data가 temp를 가리키게 함
근데 문제는 위에 new T[capacity * 2]할때 T의 디폴트 생성자들이 capacity * 2만큼 호출돼서
기존의 STL Stack보다 느려지더라. primitive type들은 내꺼가 더 빠른데 클래스만 집어넣으면 생성자때문에 느려짐
어떻게 하면 이 문제를 해결할 수 있을까??
STL을 뜯어보자 ㅇㅅㅇ
STL 정의부 한번 봐봤는데 문법들 너무 어려워서 포기함 ㅠ
new T[N]에서 T 기본생성자가 호출된다고? 아니지않나?
아니다 호출되는 것 같다 기억이 가물가물
답변이 좀 늦었는데 일단 지금 당장 default constructor 안부르게하는법은 static_cast<T>(operator new(sizeof(T) * capacity * 2)); 아니면 걍 static_cast<T>(malloc(sizeof(T) * capacity * 2)); 그리고 allocator 컨셉에대해서 아직 모르는거같은데 C++ 자료구조 만들때 왠만하면 호환 해주는게 좋아
와 고마워 덕분에 많이 알아가