는 내가좆밥이라 ㅠㅠ
님들 cpp에서 move했을땐 destructor 실행 안되게 하고 싶은데 이거 어케 함?
RVO가 아닌이상 대개 복사가 들어갈테고, 보통 복사 후 필요 없어진 객체 지우는데 소멸자가 호출될 텐데… 상황을 제시하는 게 어떨까 싶음. 원하는 게 가능한지, 불가능한지 판단하기 힘든 듯. C++ 오랜만에 보니까 이것도 새삼 까먹은 게 느껴진다.
for문 안에서 객체를 생성해서 이걸 벡터 안에다가 넣어주는 작업 하고있는뎅.. 스코프 벗어나면 그때 destructor가 불리더라구
move 써서 옮겼는데두 그럼 ㅠㅠ 사실 스코프 벗어나서 destructor가 불리는건지 아님 move 직후 불린 건지는 잘 몰겟음.. 이미 포기햇어 ㅠㅠ
move된거는 맞나요 생성자도 작동함? - dc App
move는 object 안의 content를 옮기다는거지 object 자체가 옮겨진다는게 아님
말한 예시에서 destructor가 소멸되지 않는 경우는 compiler에서 최적화를 거쳐서 temporary object 자체를 생성하지 않게 한다면 모를까 move에 담긴 의미가 temporary object를 생성하지 않겠다는건 아니기 때문에
https://www.onlinegdb.com/SyvmepF9N벡터안에서 생성하지 않으면 copy, move 생성자가 호출되어서 emplace_back을 사용함.
A 에 멤버가 int 하나만 있는게 아니고 int a, int b 두개가 있는 경우는 어떻게 됨?
emplace_back 안에 들어가는 건 생성자 인자임. 생성자 인자를 한꺼번에 제공할 수 없으면 이런 방식은 불가능하지 않을까 싶음. 대신 move 생성자를 잘 짜야겠지.
move 생성자를 어떻게 짜던간에 destructor가 호출되냐 마냐는 컴파일러의 최적화와 관련된 일이지 move의 의미 자체와는 무관하다고 보는게 맞지않음?
어…… 내가 설명을 잘못 한 것 같긴 한데, 추가 질문은 잘 이해가 안 됨. 정정하자면, 생성자 인자에 b를 추가하든가, 생성을 마친 다음에 b를 설정하든가 하면 되는 문젠듯.
ㅇㅎ emplace_back에 variadic하게 인자 넘길수있네 처음알았음
move랑 디스트럭터랑 아무 상관 없음
move는 그냥 rvalue로 캐스팅해줄 뿐이고 그거 한다고 있던 객체가 갑자기 사라지지 않음
디스트럭터는 그냥 스코프에서 벗어날 때 호출될 뿐임
윗 댓글대로 아예 객체를 벡터 내에서 만드는게 원하는 걸 달성할 수 있을 듯 (emplace_back)
c++ 개새끼 해보라 - dc App
RAII 한 move 라고 한다면 그냥 bool 플래그 넣어서 얘가 move 됬는지 안됬는지 확인하면 되지 않나. 뒷북
님들모두감사 emplace_back으로 해결함 ㅋㅋ
RVO가 아닌이상 대개 복사가 들어갈테고, 보통 복사 후 필요 없어진 객체 지우는데 소멸자가 호출될 텐데… 상황을 제시하는 게 어떨까 싶음. 원하는 게 가능한지, 불가능한지 판단하기 힘든 듯. C++ 오랜만에 보니까 이것도 새삼 까먹은 게 느껴진다.
for문 안에서 객체를 생성해서 이걸 벡터 안에다가 넣어주는 작업 하고있는뎅.. 스코프 벗어나면 그때 destructor가 불리더라구
move 써서 옮겼는데두 그럼 ㅠㅠ 사실 스코프 벗어나서 destructor가 불리는건지 아님 move 직후 불린 건지는 잘 몰겟음.. 이미 포기햇어 ㅠㅠ
move된거는 맞나요 생성자도 작동함? - dc App
move는 object 안의 content를 옮기다는거지 object 자체가 옮겨진다는게 아님
말한 예시에서 destructor가 소멸되지 않는 경우는 compiler에서 최적화를 거쳐서 temporary object 자체를 생성하지 않게 한다면 모를까 move에 담긴 의미가 temporary object를 생성하지 않겠다는건 아니기 때문에
https://www.onlinegdb.com/SyvmepF9N
벡터
안에서 생성하지 않으면 copy, move 생성자가 호출되어서 emplace_back을 사용함.
A 에 멤버가 int 하나만 있는게 아니고 int a, int b 두개가 있는 경우는 어떻게 됨?
emplace_back 안에 들어가는 건 생성자 인자임. 생성자 인자를 한꺼번에 제공할 수 없으면 이런 방식은 불가능하지 않을까 싶음. 대신 move 생성자를 잘 짜야겠지.
move 생성자를 어떻게 짜던간에 destructor가 호출되냐 마냐는 컴파일러의 최적화와 관련된 일이지 move의 의미 자체와는 무관하다고 보는게 맞지않음?
어…… 내가 설명을 잘못 한 것 같긴 한데, 추가 질문은 잘 이해가 안 됨. 정정하자면, 생성자 인자에 b를 추가하든가, 생성을 마친 다음에 b를 설정하든가 하면 되는 문젠듯.
ㅇㅎ emplace_back에 variadic하게 인자 넘길수있네 처음알았음
move랑 디스트럭터랑 아무 상관 없음
move는 그냥 rvalue로 캐스팅해줄 뿐이고 그거 한다고 있던 객체가 갑자기 사라지지 않음
디스트럭터는 그냥 스코프에서 벗어날 때 호출될 뿐임
윗 댓글대로 아예 객체를 벡터 내에서 만드는게 원하는 걸 달성할 수 있을 듯 (emplace_back)
c++ 개새끼 해보라 - dc App
RAII 한 move 라고 한다면 그냥 bool 플래그 넣어서 얘가 move 됬는지 안됬는지 확인하면 되지 않나. 뒷북
님들모두감사 emplace_back으로 해결함 ㅋㅋ