std :: function을 콜백 처리기로 사용하려고합니다. 이 예에서는 이와 같은메서드 인수, 복사 또는 shared_ptr에 대한 std :: function?
같은
void some_job(int arg1, std::function<void(int)> & callback)
{
callback(process(arg1));
}
난 패스 별 기준을 사용 하였다.
그러나 문제점은 내 프로그램에서 비동기 컨텍스트에서 함수가 실행되기 때문에 개체 인 callback
이 여전히 존재한다는 것을 보장 할 수 없습니다.
그래서 함수 객체의 수명주기를 관리해야하므로 두 가지 방법으로 생각했습니다. std::shared_ptr
내가 std::function
의 크기가 24 내 시스템 바이트 std::shared_ptr
고정 알고 사용
하여 통과하여 값 (사본)
8.
이고그러나
std::shared_ptr
을 복사하면 참조 카운터를 관리하는 추가 오버 헤드가 발생합니다. (더구나std::function
의 shared_ptr 개체를 만드는 현명하고 깔끔한 방법을 찾을 수 없습니다.)성능면에서 어느 쪽이 더 좋을까요? 당신이 그래서 시간이 중요한 그것이 오버 헤드 공유 + 24 바이트 8 바이트를 복사 빠르다 여부를 걱정 프로그램의 일부에있는 경우
그냥 값으로 복사하고 그 값으로 완료하십시오. –
"성능면에서 어느 쪽이 좋을까요?" 현실적인 실행 시나리오로 측정하십시오. 그러나 나는 가치를 지니고 문제가된다면 그것에 대해서만 생각할 것입니다. – juanchopanza
토니의 대답은 거의 확실합니다. 공유 포인터 참조 계산은 너무 무겁습니다. 성능 문제를 프로파일 링하고 시연 할 때까지 복사하는 것이 좋으며 걱정하지 않아도됩니다. –