며칠 동안 공유 포인터를 이해하려고 시도하고 있었고 그것을 얻을 수없는 것처럼 느껴졌습니다. 그것이 명백한 것인지 또는 너무 복잡 한 것인지 확실하지 않습니다. 우선, 누군가 공유 포인터를 사용하는 예를 들어주십시오. Wikipedia의 예제는 나에게 의미가 없습니다. 그리고 공유 포인터를 다른 함수에 전달하거나 공유 포인터가있는 객체를 만드는 방법은 무엇입니까? 그래서, 어떻게 전달하고 어디에서 사용할 것입니까? 어떤 정보 나 예도 좋을 것입니다.QSharedPointer, 전달 방법 및 필요합니까?
또한 무엇을 사용해야할지 모르겠다. 이 함수는 QFile
을 할당하고 다른 클래스의 함수에 전달합니다. 이 함수는 파일을 QIODevice*
으로 가져온 다음 파일을 포함하는 개체를 만듭니다. 여기에 가장 좋은 해결책이 무엇인지 그리고 공유 포인터를 어떻게 사용해야하는지 궁금합니다. <QFile>
과 공유 포인터를 만들고 함수가 <QIODevice>
인 곳으로 전달하는 방법은 무엇입니까? 필자는 전혀 공유 포인터를 얻지 못한다고 느낀다.
다른 접근법은 의 할당을 QScopedPointer
에 넣는 것이다. 그런 다음 클래스에 전달하고 파일을 저장할 객체를 만들 때 QPointer
또는 QScopedPointer
을 사용합니다. 첫 번째 호출 함수의 끝에서 take()를 호출해야합니까?
function() {
QScopedPointer<QFile> item(new QFile("filename"));
SomeClassObject->doStuff(item.data());
item.take();
}
---------------------------------
SomeClass::doStuff(QIODevice *item) {
_currentObject = new MyObject(item); // should _currentObject be a smartpointer?
...
}
---------------------------------
class MyObject {
QPointer<QIODevice> _item;
...
MyObject(QIODevice *item) { _item = item; }
}
그래서 "새로운"예외가 발생할 경우 포인터를 만들고이를 처리하는 방법을 저장하고 싶습니다.
함수의 인수를 QScopedPointer로 만드는 좋은 이유는 없습니다.포인터를 사용하지 않고 원시 포인터 (모든 * 관리 된 포인터 타입을 허용)로 만들거나 공유 포인터로 만듭니다. (복사를 피하고 객체를 공유하는'_currentObject'를 만듭니다. 가능성). 범위가 지정된 포인터를 전달하는 것은 참조해야하고 사용자에게 스마트 포인터를 선택하도록 강요합니다. 다른 유형의 스마트 포인터를 사용하는 경우에는 좋지 않습니다. –
보이지 않습니다. 왜 원시 포인터 대신에 공유 포인터를 전달하는 것이 문제가되는지 (특정 유형의 강제력 외에도). 원시 포인터를 전달하는 것보다 안전하다고 생각합니다 (예 : 호출자가 내 컨테이너에서 삭제하는 것을 두려워하지 않고 전역 컨테이너에 매개 변수를 저장할 수 있음). 공유 포인터는 확실히 참조 할 필요는 없지만 복사 생성자 논리는 복사본이 적절하게 동작하는지 확인합니다. 확실히 참조를 통해 기본 객체를 전달할 수 있지만 포인터를 사용하는 이유는 무엇입니까? – Attila
QFile과 함께 사용할 것이므로 QIODevice를 사용해야합니다. 코드에서 함수가 기본 유형을 취해야하는 다른 상황이 있습니다. – chikuba