개요
성능, 혹은 디버깅을 위해서 커스텀 malloc/free를 쓰는 일이 잇다. 문제는 malloc/free로 사용하면 소멸자/생성자가 호출되지 않기 떄문에 C++에 그냥 통합할수는 없다. 편법으로 delete/new를 오버라이딩해서 쓸수도 잇지만 이경우 클래스에 하나에 대해서 2가지 이상의 malloc함수를 사용할수 없다.
구현 예제
구현체
template
void CallConstructor(T *ptr) {
new(ptr) T;
}
template
void CallDestructor(T *ptr) {
ptr->~T();
}
사용법
struct CtorDtorSample {
CtorDtorSample() { value = 1; }
~CtorDtorSample() { value = 0;}
static int value;
};
int CtorDtorSample::value = -1;
TEST(CallConstructor_CallDestructor, test) {
using namespace sora;
EXPECT_EQ(-1, CtorDtorSample::value);
CtorDtorSample *ptr = (CtorDtorSample*)malloc(sizeof(CtorDtorSample));
CallConstructor(ptr);
EXPECT_EQ(1, CtorDtorSample::value);
CallDestructor(ptr);
free(ptr);
EXPECT_EQ(0, CtorDtorSample::value);
}