>백엔드 개발 >C++ >std::thread에 대한 참조로 클래스 객체를 전달하면 여전히 복사 생성자가 트리거되는 이유는 무엇입니까?

std::thread에 대한 참조로 클래스 객체를 전달하면 여전히 복사 생성자가 트리거되는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-17 15:54:01424검색

Why Does Passing a Class Object by Reference to std::thread Still Trigger the Copy Constructor?

std::thread 참조로 전달하면 복사 생성자가 호출됩니다

문제:

전달할 때 참조에 의한 std::thread에 대한 Log 클래스의 객체, 컴파일러 오류 참조 전달이 복사 생성자를 우회해야 한다는 기대에도 불구하고 발생합니다. 반대로, 포인터로 객체를 전달하면 문제가 해결됩니다.

설명:

이 동작의 근본적인 이유는 std::thread에서 인수를 전달해야 한다는 것입니다. 값. Log &logger에서와 같이 참조로 전달하는 것은 포인터를 전달하는 것과 동일한 효과를 갖습니다. 즉, 스레드에 전달될 객체의 복사본을 생성하려면 복사 생성자가 여전히 필요합니다.

해결책:

참조 의미를 다시 얻으려면 sử dụng std::reference_wrapper:

std::thread newThread(session, &sock, std::ref(logger));

참고:

  1. 참조된 개체(이 경우 로거)의 수명이 스레드의 수명을 초과하는지 확인하세요. .
  2. 제공된 코드에서 Log의 복사 생성자는 비공개이므로 추가 생성을 방지합니다. 사본.

위 내용은 std::thread에 대한 참조로 클래스 객체를 전달하면 여전히 복사 생성자가 트리거되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.