가능합니까? 그렇다면 Qt에서 shared_ptr에 대한 const 참조 인 신호/슬롯을 어떻게 만들 수 있습니까? 나는이처럼 보이는 신호를 원하는 :신호/슬롯에서 boost :: shared_ptr을 사용하는 Qt
void signal(shared_ptr<SomeClass> const &)
내가 일정한 기준없이이 작업을 수행하는 방법을 알고, 즉 단순히 유형 shared_ptr<SomeClass>
하지만 복사를 방지하고 싶습니다 효율성 * 이유입니다. 참조 유형에 대한 동일한 구문이 작동하지 않습니다 : 표준 API를
Q_DECLARE_METATYPE(shared_ptr<SomeClass> const &)
qRegisterMetaType<shared_ptr<SomeClass> const&>();
많은 사람들이 그래서 그것을 근본적으로 가능하다 생각 난 그냥 구문을 알아낼 수 없습니다 QString const &
있습니다.
은 ** 성능에 대한 가장 큰 문제는 복사 시간이 아니라 객체로 뮤텍스 잠금/잠금 해제의 양이 모든 수신기에 복사됩니다 - 그 중 많이 있습니다. 여러 스레드가 객체를 사용함에 따라 눈에 띄는 속도 저하/병목 현상이 발생합니다. shared_ptr의 사실 않으면 그냥 신호에 const를 참조에 대한 일반적인 질문은 그러나 여전히이 비용도 사소한 원자 연산을 사용 * 지금까지 내가 단순히이 할 수있는 것을 발견했다
shared_ptr을 const 참조로 전달하지 않으면 먼저 shared_ptr이있는 지점이 무효화됩니까? 문제의 객체에 const 참조/포인터를 전달하십시오. – messenger
@messenger, const 참조는 함수 호출시 shared_ptr 복사를 피하기위한 최적화입니다. 이것은 매우 일반적인 패턴입니다. 값 (신호 또는 일반 함수)을 항상 전달하면 shared_ptr은 일반 포인터와 비교할 때 상당히 비쌉니다. 정상적인 포인터는 "방출"측의 객체 수명이 보장되지 않으므로 여기에서 사용할 수 없습니다. –
@ edA-qa mort-ora-y : 부스트 shared_ptr이 뮤텍스를 사용합니까 ??? 왜 그 ??? 원자 증가/감소가 모두 필요하지 않습니까? – mmmmmmmm