-
std::shared_ptr shared_from_this 잘못된 사용프로그래밍/의문 2015. 8. 7. 09:55반응형
문제의 코드
12345678910111213LobbyServer(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 오류가 발생했던 것이다.
12345678910111213void 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의 동작 방식을 조금 더 이해할 수 있었다.
반응형'프로그래밍 > 의문' 카테고리의 다른 글
ODBC BindParametert 사용 시 문자열의 길이로는 SQL_NTS를 넣어줘야 한다. (0) 2015.10.28 VS NuGet으로 라이브러리가 설치되지 않았던 문제 (0) 2015.08.23 asio udp client 작업 중 람다 캡처를 잘못 사용한 문제 (0) 2015.07.14 수신 오류로 착각한 송신 오류 (0) 2015.06.10 서버 코딩 중 있었던 수신 직후 소켓이 닫히던 버그 (0) 2015.05.25