config 파일에서는 depth 가 깊은 블록이 상위 블록의 내용을 상속 받아 사용하게 되어있음
이를 구현하기 위하여 부모 블록과 자식 블록이라는 개념으로 접근해 자식 블록이 부모 블록의 주소를 가지도록 구현함
Block *parent
하지만 이를 위해서는 모든 블록이 정적 할당이 아닌 동적 할당 new Block()
되어야 했고 자식 블록들을 가지고 있는 벡터 역시 객체 포인터 배열로 바뀌었음 std::vector<Block *>
이로 인하여 복사 생성자가 얕은 복사를 하지 않고 깊은 복사를 하고, 소멸자 역시 차례대로 delete를 하도록 변경이 필요했는데 이 과정에서 너무 많은 자원이 소모됨
따라서 parent 포인터를 사용하지 않고 자식 블록이 생성되는 시기에 부모 블록의 내용들로 초기화하는 메서드를 호출하고, 파싱하는 과정에서 지시자가 등장하면 해당 지시자에 대한 값을 업데이트하는 방식으로 변경
Block::Block() : host_(""), port_(0), webRoot_(""), clientMaxBodySize_(0), uri_(""), index_(""), autoIndex_("off") {
setServerDirectivesMap();
}
void Block::setChildLocationBlock(const Block &parent) {
setLocationDirectivesMap();
host_ = parent.host_;
port_ = parent.port_;
serverNames_ = parent.serverNames_;
webRoot_ = parent.webRoot_;
allowedMethods_ = parent.allowedMethods_;
clientMaxBodySize_ = parent.clientMaxBodySize_;
errorPages_ = parent.errorPages_;
uri_ = parent.uri_;
index_ = parent.index_;
autoIndex_ = parent.autoIndex_;
cgi_ = parent.cgi_;
}