뮤텍스 매니저가 소멸될시 뮤텍스가 unlock되고 매니저가 복사되도 한번만 unlock되도록 shared_ptr 이용하고 deleter 자리에 unlock 함수를 람다로 넣었는데요(effective c++ 참고)
혹시 이 매니저가 생성될 때마다 람다도 재활용 없이 계속 생성되는 건가요?
그렇다면 deleter를 람다도 정의하지 말고 따로 함수로 빼야할 것 같아서요
뮤텍스 매니저가 소멸될시 뮤텍스가 unlock되고 매니저가 복사되도 한번만 unlock되도록 shared_ptr 이용하고 deleter 자리에 unlock 함수를 람다로 넣었는데요(effective c++ 참고)
혹시 이 매니저가 생성될 때마다 람다도 재활용 없이 계속 생성되는 건가요?
그렇다면 deleter를 람다도 정의하지 말고 따로 함수로 빼야할 것 같아서요
컴파일러가 재활용해줄듯 ㅇㅅㅇ 그 정도 비용은 신경쓰지 마세요 - return 0;
감사합니다 과감히 쓰도록 할게요 ㅋㅋ
템플릿이니까 알아서 함수로 최적화될거같음
근데 여기선 멤버 변수가 상수라 컴파일러가 생성한 복사 생성자나 복사 할당자로는 복사 안되지 않나? 나도 쪼렙이라 물어봄
저 경우에 캡쳐가 없기 때문에 그냥 함수로 취급해도 무방함 그래서 아마 걍 함수 포인터로 최적화거나 함수호출하는 지점들을 그냥 정적호출로 바꿀듯 - return 0;
복사 생성자는 되지 대입이 안되서 operator=가 안되겠지
근데 여기선 복사생성해도 락걸린 상태로 또 락을 걸테니 다른 문제가 생길 것 같은데
const 맴버는 생성자로는 초기화 가능함 위에말대로 아얘 복사를 delete해야할 타입이지만
복사 가능하게 만든다면 lock 대신 try_lock 쓰고 non-const로 멤버 수정하면 되겠네
복사할 일이 있나는 모르겠다
간과한게 많네요 더 고민해볼게요
고민 및 실험해본 결과 lock은 일부러 뮤텍스를 넘기는 생성을 하지 않는 이상 실행될 일이 없어서 복사 생성이랑은 상관 없는 것 같아요 복사 할당 위해 멤버변수에 const만 없애면 될 것 같아요