2016-09-12 3 views
0

std :: shared_ptr과 함께 신호/슬롯을 매개 변수로 사용하는 Qt 코드를 테스트하고 싶습니다.QSignalSpy 및 std :: shared_ptr

내 문제는 다른 모든 유형의 매개 변수에 대해 잘 작동하는 QSignalSpy 클래스가 표준 공유 포인터를 사용할 때 훌륭하게 작동하지 않는 것입니다. 사실, takeFirst 메서드는 QVariant의 목록을 반환합니다.

QVERIFY(arguments.at(0).value<std::shared_ptr<Canard>>() == canardInstance); // verify the first argument 

을하지만 나는이 스마트 포인터가 같은 힙 메모리를 참조와 끝까지, 그리고 현재 범위의 외출 때 충돌 : 그 같은 일을 가리키는 shared_ptr로 인수를 변환 할 수 있습니다. QSignalSpy를 사용할 수 있습니까?

감사합니다.

+0

공유 포인터가 필요합니까? Qt는 자신 만의 "메모리 관리"를 가지고 있기 때문에 공유 포인터와 잘 작동하지 않습니다. 해결 방법으로 클래스에 shared_ptr을 저장하면 메모리를 유지하고 raw-ptr (또는 인덱스)을 사용하여 슬롯에 액세스 할 수 있습니다. – Hayt

+0

예 부모와 함께 QObject가 필요 없지만 여러 스레드와 공유되고 아무도 필요하지 않을 때 삭제되는 내용이 필요합니다. – CanardMoussant

+0

아직 그 사람들과 일 해본 적이 없지만'QSharedPointer'를 살펴볼 수 있습니다. 다른 방법으로는 std 공유 포인터를 Qt와 쉽게 사용하는 방법을 보지 못합니다. – Hayt

답변

0

사실 나는 완전히 요점을 놓쳤다. 그것은 잘 작동했다 (즉, 참조 계산이 예상대로 작동 함을 의미). 그러나 다른 이유로 메모리 손상이 발생했습니다. 나는 QSharedPointer를 사용하여 동일한 동작을 시도했다.

관련 문제