프로그래밍/의문
std::shared_ptr shared_from_this 잘못된 사용
제페
2015. 8. 7. 09:55
반응형
문제의 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 | LobbyServer(size_t poolSize, unsigned short port) { sessionPool.reserve(poolSize); for (auto i = 0; i < poolSize; ++i) { auto sharedThis = shared_from_this(); // error! auto newSession = std::make_shared<TcpSession>(port, sharedThis); sessionPool.emplace_back(newSession); // n개의 세션 풀을 만듦 } } | cs |
뭐가 문제일까. shared_from_this()를 하는데 오류가 발생하지? // 7번 라인
LobbyServer 인스턴스를 shared_ptr로 생성 했는데?
이유는 생성자에서 shared_from_this를 호출한 데에 있었다.
저 초기화 코드 부분을 별도의 함수로 떼어내자 정상적으로 동작했다.
enable_shared_from_this 를 상속하고 shared_from_this를 사용하려는데 내부적으로 가지는 weak_ptr 인스턴스가 초기화 되기도 전에 shared_from_this를 호출해서 bad_weak_ptr 오류가 발생했던 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | void LobbyServer::Start(size_t poolSize, unsigned short port) { sessionPool.reserve(poolSize); for (auto i = 0; i < poolSize; ++i) { auto sharedThis = shared_from_this(); auto newSession = std::make_shared<TcpSession>(port, sharedThis); sessionPool.emplace_back(newSession); // n개의 세션 풀을 만듦 } } | cs |
음,., 덕분에 enable_shared_from의 동작 방식을 조금 더 이해할 수 있었다.
반응형