내가 죄인이였다...
std::vector의 emplace_back이 빈 클래스 생성 후에 move 시키는 것을 대충 알면서 소멸자에서 기존 클래스의 일부 포인터를 제대로 NULL로 안바꿔줘서 그랬다....
내가 죄인이다.
나를 벌하라.
내가 죄인이였다...
std::vector의 emplace_back이 빈 클래스 생성 후에 move 시키는 것을 대충 알면서 소멸자에서 기존 클래스의 일부 포인터를 제대로 NULL로 안바꿔줘서 그랬다....
내가 죄인이다.
나를 벌하라.
C++가 잘못했네
아냐 내가 잘못한거야.... C는 알아도 C++은 아직 멀었다는게 뼈저리게 느껴졌다....
emplace_back이 생성후에 이동을 불렀다고? push_back에서 inplace-construction이 불가능해서 그거 가능하게하는 emplace_back이 나온건데. 물론 vector(object)::emplace_back(object{}) 이런식으로 해놨으면 emplace_back도 temporary 만드는걸 못막아주는데 설마 이렇게 해놓진 않았을거 같고, 글로만봐선 무슨상황인지 잘 모르겠네.
나도 그런줄 알고 처음에는 그냥 썼다가 안되어서 이동생성자랑 이동연산자 추가하고선 돌리다가 자꾸 소켓 소멸자 호출되어서 확인하고선 소멸자에 내가 실수로 포인터 NULL 초기화 안한 부분 보강하고선 돌리니 됨. 이게 정확히는 emplace_back 자체가 이동을 하는게 아니라 back 추가하면서 vector resize과정에서 발생함
스마트포인터 씁시다
그냥 C 쓰면 안 댐?
안댐