일단 자체적으로 오브젝트씨 스러운 스마트포인터 비슷한거 만들어놓고 메모리관리하는데

그에 따라서 오토릴리즈가 자동으로 되도록 자기자신 포인터를 반환하는 create 메소드를 각 클래스마다 구현한단 말이야,

create 메소드를 보면 안전하게 메모리를 잡기위해서 new하고 만약 실패했으면 사후처리까지 깔끔하게 해놓는데, 여기까진 이해가 감. 근데

왜 사용자로 하여금 생성자를 이용안하고 init() 함수를 따로 둬서 그걸 이용하라(고 말은 들은거 없지만 내부적으로 뜯어보니까 왠만한 초기화도 죄다 init함수에 들어가있음)고 하는걸까?

생성자 호출에 대해서 뭔가 문제가 있는건지 아님 그냥 단순히 좀 더 사용자 친화적인 관습인건지 모르겠다

아래는 기본적인 create함수를 만들어주는, 라이브러리 내에서 제공해주는 매크로. 중간에 init 호출문이 보일거야

#define CREATE_FUNC(__TYPE__)
static __TYPE__* create()
{
__TYPE__ *pRet = new(std::nothrow) __TYPE__();
if (pRet && pRet->init())
{
pRet->autorelease();
return pRet;
}
else
{
delete pRet;
pRet = NULL;
return NULL;
}
}

From DC Wave