QSharedPointer Class
template <typename T> class QSharedPointerQSharedPointer 클래스는 공유 포인터에 대한 강력한 참조를 보유합니다. 더 보기...
| 헤더: | #include <QSharedPointer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
참고: 이 클래스의 모든 함수는 재진입 가능합니다.
QSharedPointer 비교
| 범주 | 비교 가능한 유형 | 설명 |
|---|---|---|
| strong | QSharedPointer | |
| strong | QSharedPointer<X>, X* 및 std::nullptr_t. | 여기서 X와 T는 호환되는 유형으로, 둘이 동일하거나 하나가 다른 하나의 기본 유형이어야 합니다. |
공개 함수
| QSharedPointer() | |
| QSharedPointer(QSharedPointer<X> &&other) | |
| QSharedPointer(X *ptr) | |
| QSharedPointer(const QWeakPointer<T> &other) | |
| QSharedPointer(std::nullptr_t) | |
| QSharedPointer(X *ptr, Deleter d) | |
| QSharedPointer(std::nullptr_t, Deleter d) | |
| QSharedPointer(const QSharedPointer<T> &other) | |
| QSharedPointer(QSharedPointer<T> &&other) | |
| ~QSharedPointer() | |
| void | clear() |
| QSharedPointer<X> | constCast() const & |
(since 6.9) QSharedPointer<X> | constCast() && |
| T * | data() const |
| QSharedPointer<X> | dynamicCast() const & |
(since 6.9) QSharedPointer<X> | dynamicCast() && |
| T * | get() const |
| bool | isNull() const |
| QSharedPointer<X> | objectCast() const & |
(since 6.9) QSharedPointer<X> | objectCast() && |
(since 6.7) bool | owner_before(const QSharedPointer<X> &other) const |
(since 6.7) bool | owner_before(const QWeakPointer<X> &other) const |
(since 6.7) bool | owner_equal(const QSharedPointer<X> &other) const |
(since 6.7) bool | owner_equal(const QWeakPointer<X> &other) const |
(since 6.7) size_t | owner_hash() const |
| void | reset() |
| void | reset(T *t) |
| void | reset(T *t, Deleter deleter) |
| QSharedPointer<X> | staticCast() const & |
(since 6.9) QSharedPointer<X> | staticCast() && |
| void | swap(QSharedPointer<T> &other) |
| QWeakPointer<T> | toWeakRef() const |
| operator bool() const | |
| bool | operator!() const |
| T & | operator*() const |
| T * | operator->() const |
| QSharedPointer<T> & | operator=(QSharedPointer<T> &&other) |
| QSharedPointer<T> & | operator=(QSharedPointer<X> &&other) |
| QSharedPointer<T> & | operator=(const QSharedPointer<T> &other) |
| QSharedPointer<T> & | operator=(const QWeakPointer<T> &other) |
정적 공용 멤버
| QSharedPointer<T> | create(Args &&... args) |
관련 비회원
| size_t | qHash(const QSharedPointer<T> &key, size_t seed = 0) |
| QSharedPointer<X> | qSharedPointerCast(const QSharedPointer<T> &other) |
| QSharedPointer<X> | qSharedPointerCast(const QWeakPointer<T> &other) |
(since 6.9) QSharedPointer<X> | qSharedPointerCast(QSharedPointer<T> &&other) |
| QSharedPointer<X> | qSharedPointerConstCast(const QSharedPointer<T> &src) |
| QSharedPointer<X> | qSharedPointerConstCast(const QWeakPointer<T> &src) |
(since 6.9) QSharedPointer<X> | qSharedPointerConstCast(QSharedPointer<T> &&src) |
| QSharedPointer<X> | qSharedPointerDynamicCast(const QSharedPointer<T> &src) |
| QSharedPointer<X> | qSharedPointerDynamicCast(const QWeakPointer<T> &src) |
(since 6.9) QSharedPointer<X> | qSharedPointerDynamicCast(QSharedPointer<T> &&src) |
| QSharedPointer<X> | qSharedPointerObjectCast(const QSharedPointer<T> &src) |
| QSharedPointer<X> | qSharedPointerObjectCast(const QWeakPointer<T> &src) |
| std::shared_ptr<X> | qSharedPointerObjectCast(const std::shared_ptr<T> &src) |
| std::shared_ptr<X> | qSharedPointerObjectCast(std::shared_ptr<T> &&src) |
(since 6.9) QSharedPointer<X> | qSharedPointerObjectCast(QSharedPointer<T> &&src) |
(since 6.12) QSharedPointer<X> | qSharedPointerStaticCast(const QSharedPointer<T> &other) |
(since 6.12) QSharedPointer<X> | qSharedPointerStaticCast(const QWeakPointer<T> &other) |
(since 6.12) QSharedPointer<X> | qSharedPointerStaticCast(QSharedPointer<T> &&other) |
| std::shared_ptr<X> | qobject_pointer_cast(const std::shared_ptr<T> &src) |
| std::shared_ptr<X> | qobject_pointer_cast(std::shared_ptr<T> &&src) |
| bool | operator!=(const QSharedPointer<T> &lhs, const QSharedPointer<X> &rhs) |
| bool | operator!=(const QSharedPointer<T> &lhs, const X *rhs) |
| bool | operator!=(const QSharedPointer<T> &lhs, std::nullptr_t) |
| bool | operator!=(const T *lhs, const QSharedPointer<X> &rhs) |
| bool | operator!=(std::nullptr_t, const QSharedPointer<T> &rhs) |
| QDebug | operator<<(QDebug debug, const QSharedPointer<T> &ptr) |
| bool | operator==(const QSharedPointer<T> &lhs, const QSharedPointer<X> &rhs) |
| bool | operator==(const QSharedPointer<T> &lhs, const X *rhs) |
| bool | operator==(const QSharedPointer<T> &lhs, std::nullptr_t) |
| bool | operator==(const T *lhs, const QSharedPointer<X> &rhs) |
| bool | operator==(std::nullptr_t, const QSharedPointer<T> &rhs) |
상세 설명
QSharedPointer는 C++의 자동 공유 포인터로, 템플릿 매개변수 T 는 관리되는 포인터의 유형을 지정합니다. const 속성을 포함한 일반적인 용도에서 이 포인터는 일반 포인터와 똑같이 작동합니다.
QSharedPointer는 다른 QSharedPointer 객체가 해당 포인터를 참조하고 있지 않은 경우, 스코프를 벗어날 때 보유하고 있는 포인터를 삭제합니다.
QSharedPointer 객체는 일반 포인터, 다른 QSharedPointer 객체, 또는 QWeakPointer 객체를 강력한 참조로 승격시켜 생성할 수 있습니다.
스레드 안전성
QSharedPointer와 QWeakPointer 는 재진입 가능한 클래스입니다. 즉, 일반적으로 동기화 없이는 여러 스레드가 동시에 특정 QSharedPointer 또는 QWeakPointer 객체에 접근할 수 없습니다.
서로 다른 QSharedPointer 및 QWeakPointer 객체는 여러 스레드에서 동시에 안전하게 액세스할 수 있습니다. 여기에는 동일한 객체에 대한 포인터를 보유하는 경우도 포함되며, 참조 카운팅 메커니즘은 원자적이므로 수동 동기화가 필요하지 않습니다.
다만, 포인터 값은 이러한 방식(즉, 동기화 없이 여러 스레드가 동시에)으로 접근할 수 있지만, QSharedPointer와 QWeakPointer 는 포인터가 가리키는 객체에 대해서는 어떠한 보장도 제공하지 않는다는 점에 유의해야 합니다. 해당 객체에 대한 구체적인 스레드 안전성 및 재진입성 규칙은 여전히 적용됩니다.
기타 포인터 클래스
Qt는 또한 QPointer 와 QSharedDataPointer 라는 두 가지 다른 포인터 래퍼 클래스를 제공합니다. 이 두 클래스는 각각 매우 다른 사용 사례를 가지고 있으므로 서로 호환되지 않습니다.
QSharedPointer는 외부 참조 카운트(즉, 객체 외부에 배치된 참조 카운터)를 통해 공유 포인터를 보유합니다. 이름에서 알 수 있듯이, 포인터 값은 QSharedPointer와 QWeakPointer 의 모든 인스턴스 간에 공유됩니다. 그러나 포인터가 가리키는 객체의 내용은 공유된 것으로 간주되어서는 안 됩니다. 객체는 단 하나뿐이기 때문입니다. 이러한 이유로 QSharedPointer는 가리키는 객체를 분리하거나 복사하는 방법을 제공하지 않습니다.
QSharedDataPointer반면, ` QSharedData`는 공유 데이터(즉, ` `에서 파생된 클래스)에 대한 포인터를 보유합니다. 이는 QSharedData 기본 클래스에 배치된 내부 참조 카운트를 통해 이루어집니다. 따라서 이 클래스는 보호 대상 데이터에 대한 접근 유형에 따라 연결을 해제할 수 있습니다. 비const 접근인 경우, 작업이 완료되도록 원자적으로 복사본을 생성합니다.
QExplicitlySharedDataPointer 는 QSharedDataPointer 의 변형이지만, QExplicitlySharedDataPointer::detach()이 명시적으로 호출된 경우에만 분리된다는 점이 다릅니다(이 때문에 이름이 붙여졌습니다).
QScopedPointer 는 단순히 힙에 할당된 객체에 대한 포인터를 보유하며, 소멸자에서 이를 삭제합니다. 이 클래스는 객체를 힙에 할당하고 삭제해야 할 때 유용하지만, 그 이상의 용도는 없습니다. QScopedPointer 는 경량적이며, 추가적인 구조체나 참조 카운팅을 사용하지 않습니다.
마지막으로, ` QPointer `는 ` QObject`에서 파생된 객체에 대한 포인터를 보유하지만, 이는 약한 참조(weak reference) 방식으로 처리됩니다. ` QWeakPointer `도 동일한 기능을 제공하지만, 해당 기능에 대한 사용은 더 이상 권장되지 않습니다.
선택적 포인터 추적
디버깅 목적으로 컴파일 시점에 활성화할 수 있는 QSharedPointer의 기능 중 하나는 포인터 추적 메커니즘입니다. 이 기능이 활성화되면 QSharedPointer는 추적하는 모든 포인터를 전역 세트에 등록합니다. 이를 통해 동일한 포인터를 두 개의 QSharedPointer 객체에 할당하는 것과 같은 오류를 포착할 수 있습니다.
이 기능은 QSharedPointer 헤더를 포함하기 전에 ` QT_SHAREDPOINTER_TRACK_POINTERS ` 매크로를 정의하여 활성화할 수 있습니다.
이 기능을 사용하지 않고 컴파일된 코드에서도 이 기능을 안전하게 사용할 수 있습니다. QSharedPointer는 포인터 추적 기능이 활성화되지 않은 상태로 컴파일된 코드에서도 해당 포인터가 추적기에서 제거되도록 보장합니다.
그러나 포인터 추적 기능에는 다중 상속이나 가상 상속(즉, 두 개의 서로 다른 포인터 주소가 동일한 객체를 가리킬 수 있는 경우)에 대한 제한이 있다는 점에 유의하십시오. 이 경우, 포인터가 다른 유형으로 형변환되고 그 값이 변경되면, QSharedPointer의 포인터 추적 메커니즘이 추적 중인 객체가 동일하다는 사실을 감지하지 못할 수 있습니다.
QSharedDataPointer, QWeakPointer, QScopedPointer 및 QEnableSharedFromThis도 참조하십시오 .
멤버 함수 문서
QSharedPointer::QSharedPointer()
null인 QSharedPointer를 생성합니다(객체가 nullptr 에 대한 참조를 보유하고 있음).
[noexcept] template <typename X> QSharedPointer::QSharedPointer(QSharedPointer<X> &&other)
other 가 가리키던 객체를 가리키도록 QSharedPointer 인스턴스를 생성합니다.
제약 조건
X* 가 T* 로 암시적으로 변환되는 경우에만 오버로드 해결에 참여합니다.
[explicit] template <typename X> QSharedPointer::QSharedPointer(X *ptr)
ptr 를 가리키는 QSharedPointer를 생성합니다. 포인터 ptr 는 이 QSharedPointer에 의해 관리되며, 다른 QSharedPointer 객체에 전달되거나 이 객체 외부에서 삭제되어서는 안 됩니다.
Qt 5.8부터는 이 QSharedPointer에 대한 마지막 참조가 소멸될 때, ptr 는 X 의 소멸자가 호출되어 삭제됩니다( X 가 QSharedPointer의 템플릿 매개변수 T 과 동일하지 않은 경우에도 마찬가지입니다). 이전에는 T 의 소멸자가 호출되었습니다.
QSharedPointer::QSharedPointer(const QWeakPointer<T> &other)
약한 참조 other 를 강한 참조로 변환하고 해당 포인터를 공유하여 QSharedPointer를 생성합니다.
T 가 이 클래스의 템플릿 매개변수의 파생형인 경우, QSharedPointer는 자동 형 변환을 수행합니다. 그렇지 않은 경우 컴파일러 오류가 발생합니다.
QWeakPointer::toStrongRef()도 참조하십시오 .
QSharedPointer::QSharedPointer(std::nullptr_t)
null인 QSharedPointer를 생성합니다. 이는 QSharedPointer의 기본 생성자와 동일합니다.
template <typename X, typename Deleter> QSharedPointer::QSharedPointer(X *ptr, Deleter d)
ptr 를 가리키는 QSharedPointer를 생성합니다. 포인터 ptr 는 이 QSharedPointer에 의해 관리되며, 다른 QSharedPointer 객체에 전달되거나 이 객체 외부에서 삭제되어서는 안 됩니다.
deleter 매개변수 d 는 이 객체에 대한 사용자 정의 삭제 함수를 지정합니다. 강력한 참조 횟수가 0이 되면 operator delete() 대신 사용자 정의 삭제 함수가 호출됩니다. 이는 예를 들어, QObject 에서 deleteLater()를 호출하는 대신 다음과 같이 사용할 때 유용합니다:
static void doDeleteLater(MyObject *obj)
{
obj->deleteLater();
}
void otherFunction()
{
QSharedPointer<MyObject> obj =
QSharedPointer<MyObject>(new MyObject, doDeleteLater);
// continue using obj
obj.clear(); // calls obj->deleteLater();
}QSharedPointer의 템플릿 매개변수 T 가 동일하지 않더라도, 사용자 정의 삭제자 함수는 X 타입의 포인터를 인수로 받아 호출된다는 점에 유의하십시오.
다음과 같이 멤버 함수를 직접 지정할 수도 있습니다:
QSharedPointer<MyObject> obj =
QSharedPointer<MyObject>(new MyObject, &QObject::deleteLater);clear()도 참조하십시오 .
template <typename Deleter> QSharedPointer::QSharedPointer(std::nullptr_t, Deleter d)
null인 QSharedPointer를 생성합니다. 이는 QSharedPointer의 기본 생성자와 동일합니다.
deleter 매개변수 d 는 이 객체에 대한 사용자 정의 삭제기를 지정합니다. 강력한 참조 횟수가 0이 되면 operator delete() 대신 사용자 정의 삭제기가 호출됩니다.
QSharedPointer::QSharedPointer(const QSharedPointer<T> &other)
other 의 포인터를 공유하는 QSharedPointer 객체를 생성합니다.
T 가 이 클래스의 템플릿 매개변수의 파생형인 경우, QSharedPointer는 자동 형 변환을 수행합니다. 그렇지 않은 경우 컴파일러 오류가 발생합니다.
[noexcept] QSharedPointer::QSharedPointer(QSharedPointer<T> &&other)
other 가 가리키던 것과 동일한 객체를 가리키도록 QSharedPointer 인스턴스를 생성합니다.
QSharedPointer::~QSharedPointer()
이 QSharedPointer 객체를 삭제합니다. 저장된 포인터에 대한 마지막 참조인 경우, 이 메서드는 해당 포인터도 함께 삭제합니다.
void QSharedPointer::clear()
이 QSharedPointer 객체를 지워, 해당 객체가 포인터에 대해 가지고 있을 수 있는 참조를 해제합니다. 만약 이것이 마지막 참조였다면, 포인터 자체가 삭제됩니다.
template <typename X> QSharedPointer<X> QSharedPointer::constCast() const &
이 포인터의 유형에서 ` X `로 ` const_cast `을 수행하고, 참조를 공유하는 ` QSharedPointer `를 반환합니다. 이 함수는 업캐스팅과 다운캐스팅 모두에 사용할 수 있지만, 업캐스팅에 더 유용합니다.
isNull() 및 qSharedPointerConstCast()도 참조하십시오 .
[since 6.9] template <typename X> QSharedPointer<X> QSharedPointer::constCast() &&
반환된 QSharedPointer 는 *this 와 동일한 공유 소유자 집합을 공유합니다.
이 함수는 성공 시 resets 를 *this 에서 nullptr 로 오버로드합니다.
이 함수는 QSharedPointer::constCast()를 오버로드합니다.
이 함수는 Qt 6.9에서 도입되었습니다.
isNull() 및 qSharedPointerConstCast()도 참조하십시오 .
[static] template <typename... Args> QSharedPointer<T> QSharedPointer::create(Args &&... args)
QSharedPointer 객체를 생성하고 T 타입의 새 항목을 할당합니다. QSharedPointer 의 내부 구조와 객체는 단일 메모리 할당을 통해 할당되므로, 장시간 실행되는 애플리케이션에서 메모리 조각화를 줄이는 데 도움이 될 수 있습니다.
이 함수는 전달된 모든 인자(args)를 수용할 수 있는 T 타입의 생성자를 호출하려고 시도합니다. 인자는 완벽하게 전달됩니다.
T *QSharedPointer::data() const
이 객체가 참조하는 포인터의 값을 반환합니다.
참고: 이 함수가 반환한 포인터를 삭제하거나, 해당 포인터를 삭제할 수 있는 다른 함수( QSharedPointer 또는 QWeakPointer 객체 생성 포함)에 전달하지 마십시오.
template <typename X> QSharedPointer<X> QSharedPointer::dynamicCast() const &
이 포인터의 유형에서 X 로 동적 형변환을 수행하고, 참조를 공유하는 QSharedPointer 를 반환합니다. 이 함수를 상향 형변환에 사용하는 경우, QSharedPointer 는 dynamic_cast 를 수행합니다. 즉, 이 QSharedPointer 가 가리키는 객체가 X 유형이 아닌 경우, 반환된 객체는 null이 됩니다.
참고: 템플릿 유형 X 은 이 객체의 템플릿과 동일한 const 및 volatile 한정자를 가져야 하며, 그렇지 않으면 형 변환이 실패합니다. 이러한 한정자를 제거해야 하는 경우 constCast()을 사용하십시오.
qSharedPointerDynamicCast()도 참조하십시오 .
[since 6.9] template <typename X> QSharedPointer<X> QSharedPointer::dynamicCast() &&
반환된 QSharedPointer 는 *this 와 동일한 공유 소유자 집합을 공유합니다.
이 함수 resets 는 성공 시 *this 를 nullptr 로 재정의합니다.
이 함수는 QSharedPointer::dynamicCast()을 오버로드합니다.
이 함수는 Qt 6.9에서 도입되었습니다.
qSharedPointerDynamicCast()도 참조하십시오 .
T *QSharedPointer::get() const
data()와 동일합니다.
이 함수는 std::shared_ptr 과의 API 호환성을 위해 제공됩니다.
bool QSharedPointer::isNull() const
이 객체가 ` nullptr`을 가리키는 경우 ` true `을 반환합니다.
template <typename X> QSharedPointer<X> QSharedPointer::objectCast() const &
이 포인터의 유형에서 X 로의 qobject_cast()를 수행하고, 참조를 공유하는 QSharedPointer 를 반환합니다. 이 함수를 업캐스팅에 사용하는 경우, QSharedPointer 는 qobject_cast 를 수행합니다. 즉, 이 QSharedPointer 가 가리키는 객체가 X 유형이 아닌 경우, 반환되는 객체는 null이 됩니다.
참고: 템플릿 유형 X 은 이 객체의 템플릿과 동일한 const 및 volatile 한정자를 가져야 하며, 그렇지 않으면 형 변환이 실패합니다. 이러한 한정자를 제거해야 하는 경우 constCast()을 사용하십시오.
qSharedPointerObjectCast()도 참조하십시오 .
[since 6.9] template <typename X> QSharedPointer<X> QSharedPointer::objectCast() &&
반환된 QSharedPointer 는 *this 와 동일한 공유 소유자 집합을 공유합니다.
이 함수는 성공 시 resets 를 *this 에서 nullptr 로 오버로드합니다.
이 함수는 QSharedPointer::objectCast()을 오버로드합니다.
이 함수는 Qt 6.9에서 도입되었습니다.
qSharedPointerObjectCast()도 참조하십시오 .
[noexcept, since 6.7] template <typename X> bool QSharedPointer::owner_before(const QSharedPointer<X> &other) const
[noexcept, since 6.7] template <typename X> bool QSharedPointer::owner_before(const QWeakPointer<X> &other) const
이 스마트 포인터가 구현에 따라 정의된 소유자 기반 정렬 순서에서 other 보다 앞서 있는 경우에만 true 를 반환합니다. 이 정렬 순서에 따르면, 두 스마트 포인터가 모두 비어 있거나 동일한 객체를 소유하고 있는 경우(겉보기 유형과 포인터가 다르더라도) 서로 동등한 것으로 간주됩니다.
이 함수들은 Qt 6.7에서 도입되었습니다.
owner_equal도 참조하십시오 .
[noexcept, since 6.7] template <typename X> bool QSharedPointer::owner_equal(const QSharedPointer<X> &other) const
[noexcept, since 6.7] template <typename X> bool QSharedPointer::owner_equal(const QWeakPointer<X> &other) const
이 스마트 포인터와 ` other `가 소유권을 공유하는 경우에만 ` true `를 반환합니다.
이 함수들은 Qt 6.7에서 도입되었습니다.
owner_before 및 owner_hash도 참조하십시오 .
[noexcept, since 6.7] size_t QSharedPointer::owner_hash() const
이 스마트 포인터 객체에 대한 소유자 기반 해시 값을 반환합니다. ( owner_equal 에 따라) 동일한 것으로 비교되는 스마트 포인터들은 동일한 소유자 기반 해시 값을 가집니다.
이 함수는 Qt 6.7에서 도입되었습니다.
owner_equal도 참조하십시오 .
void QSharedPointer::reset()
clear()와 동일합니다. std::shared_ptr과의 호환성을 위해 제공됩니다.
void QSharedPointer::reset(T *t)
이 QSharedPointer 객체를 t 을 가리키도록 재설정합니다. 다음 코드와 동일합니다:
QSharedPointer<T> other(t); this->swap(other);template <typename Deleter> void QSharedPointer::reset(T *t, Deleter deleter)
이 QSharedPointer 객체를 t 을 가리키도록 재설정하며, Deleter는 deleter 로 지정합니다. 다음 코드와 동일합니다:
QSharedPointer<T> other(t, deleter); this->swap(other);template <typename X> QSharedPointer<X> QSharedPointer::staticCast() const &
이 포인터의 형식을 ` X `로 정적 형변환을 수행하고, 참조를 공유하는 ` QSharedPointer `를 반환합니다. 이 함수는 상향 형변환과 하향 형변환 모두에 사용할 수 있지만, 상향 형변환에 더 유용합니다.
참고: 템플릿 유형 X 는 이 객체의 템플릿과 동일한 const 및 volatile 한정자를 가져야 하며, 그렇지 않으면 형 변환이 실패합니다. 이러한 한정자를 제거해야 하는 경우에는 constCast()를 사용하십시오.
dynamicCast(), constCast(), qSharedPointerStaticCast()도 참조하십시오 .
[since 6.9] template <typename X> QSharedPointer<X> QSharedPointer::staticCast() &&
반환된 ` QSharedPointer `는 ` *this`와 동일한 공유 소유자 집합을 공유합니다.
이 함수는 성공 시 resets 를 *this 에서 nullptr 로 재정의합니다.
이 함수는 QSharedPointer::staticCast()을 오버로드합니다.
이 함수는 Qt 6.9에서 도입되었습니다.
dynamicCast(), constCast() 및 qSharedPointerStaticCast()도 참조하십시오 .
[noexcept] void QSharedPointer::swap(QSharedPointer<T> &other)
이 공유 포인터 인스턴스를 ` other`과 서로 교체합니다. 이 작업은 매우 빠르며 절대 실패하지 않습니다.
QWeakPointer<T> QSharedPointer::toWeakRef() const
이 객체가 참조하는 포인터를 공유하는 약한 참조 객체를 반환합니다.
QWeakPointer::QWeakPointer()도 참조하십시오 .
QSharedPointer::operator bool() const
포함된 포인터가 ` nullptr`가 아닌 경우 ` true `를 반환합니다. 이 함수는 다음과 같이 ` if-constructs`에서 사용하는 데 적합합니다.
if (sharedptr) { /*...*/ }isNull()도 참조하십시오 .
bool QSharedPointer::operator!() const
이 객체가 ` nullptr`을 가리키는 경우 ` true `을 반환합니다. 이 함수는 다음과 같이 ` if-constructs`에서 사용하기에 적합합니다.
if (!sharedptr) { /*...*/ }isNull()도 참조하십시오 .
T &QSharedPointer::operator*() const
공유 포인터의 멤버에 대한 접근을 제공합니다.
포함된 포인터가 ` nullptr`인 경우, 동작은 정의되지 않습니다.
isNull()도 참조하십시오 .
T *QSharedPointer::operator->() const
공유 포인터의 멤버에 대한 접근을 제공합니다.
포함된 포인터가 ` nullptr`인 경우, 동작은 정의되지 않습니다.
isNull()도 참조하십시오 .
[noexcept] QSharedPointer<T> &QSharedPointer::operator=(QSharedPointer<T> &&other)
other 를 이 QSharedPointer 인스턴스에 할당합니다.
[noexcept] template <typename X> QSharedPointer<T> &QSharedPointer::operator=(QSharedPointer<X> &&other)
other 를 이 QSharedPointer 인스턴스에 할당합니다.
제약 조건
X* 가 T* 로 암시적으로 변환되는 경우에만 오버로드 해결에 참여합니다.
QSharedPointer<T> &QSharedPointer::operator=(const QSharedPointer<T> &other)
이 객체가 ` other`의 포인터를 공유하도록 합니다. 현재 포인터 참조는 버려지며, 만약 이것이 마지막 참조였다면 해당 포인터는 삭제됩니다.
T 가 이 클래스의 템플릿 매개변수의 파생형인 경우, ` QSharedPointer `는 자동 형 변환을 수행합니다. 그렇지 않은 경우 컴파일러 오류가 발생합니다.
QSharedPointer<T> &QSharedPointer::operator=(const QWeakPointer<T> &other)
other 를 강한 참조로 승격시키고, 이 객체가 해당 객체가 참조하는 포인터에 대한 참조를 공유하도록 합니다. 현재 포인터 참조는 버려지며, 이것이 마지막 참조였던 경우 해당 포인터는 삭제됩니다.
T 가 이 클래스의 템플릿 매개변수의 파생형인 경우, ` QSharedPointer `는 자동 형 변환을 수행합니다. 그렇지 않은 경우 컴파일러 오류가 발생합니다.
관련 비회원 함수
[noexcept] template <typename T> size_t qHash(const QSharedPointer<T> &key, size_t seed = 0)
seed 를 계산의 시드로 사용하여 key 에 대한 해시 값을 반환합니다.
template <typename X, typename T> QSharedPointer<X> qSharedPointerCast(const QSharedPointer<T> &other)
other 가 보유한 포인터에 대한 공유 포인터를, X 유형으로 형변환하여 반환합니다. static_cast 가 성공하려면 T 와 X 유형이 하나의 계층 구조에 속해야 합니다.
X 는 T 와 동일한 cv-qualifiers(const 및 volatile)를 가져야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. const 속성을 제거하려면 qSharedPointerConstCast 를 사용하십시오.
QSharedPointer::staticCast(), qSharedPointerDynamicCast() 및 qSharedPointerConstCast()도 참조하십시오 .
template <typename X, typename T> QSharedPointer<X> qSharedPointerCast(const QWeakPointer<T> &other)
other 가 보유한 포인터에 대한 공유 포인터를, X 형으로 형변환하여 반환합니다. static_cast 가 성공하려면 T 와 X 유형이 하나의 계층 구조에 속해야 합니다.
other 객체는 먼저 강한 참조로 변환됩니다. 해당 변환이 실패할 경우(즉, 이 객체가 가리키는 객체가 이미 삭제된 경우), 이 함수는 null QSharedPointer 을 반환합니다.
X 는 T 와 동일한 cv-qualifiers(const 및 volatile)를 가져야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. const 속성을 제거하려면 qSharedPointerConstCast 를 사용하십시오.
QWeakPointer::toStrongRef(), qSharedPointerDynamicCast() 및 qSharedPointerConstCast()도 참조하십시오 .
[since 6.9] template <typename X, typename T> QSharedPointer<X> qSharedPointerCast(QSharedPointer<T> &&other)
반환된 QSharedPointer 는 other 와 동일한 공유 소유자 집합을 공유합니다.
이 함수는 성공 시 resets 를 other 에서 nullptr 로 변환합니다.
이 함수는 QSharedPointer::qSharedPointerCast(const QSharedPointer<T> &other)를 오버로드합니다.
이 함수는 Qt 6.9에서 도입되었습니다.
QSharedPointer::staticCast(), qSharedPointerDynamicCast() 및 qSharedPointerConstCast()도 참조하십시오 .
template <typename X, typename T> QSharedPointer<X> qSharedPointerConstCast(const QSharedPointer<T> &src)
src 가 보유한 포인터에 대한 공유 포인터를, X 유형으로 형변환하여 반환합니다. const_cast 가 성공하려면 T 와 X 유형이 하나의 계층 구조에 속해야 합니다. T 와 X 간의 const 및 volatile 차이는 무시됩니다.
QSharedPointer::constCast(), qSharedPointerStaticCast() 및 qSharedPointerDynamicCast()도 참조하십시오 .
template <typename X, typename T> QSharedPointer<X> qSharedPointerConstCast(const QWeakPointer<T> &src)
src 가 보유한 포인터에 대한 공유 포인터를, X 형으로 형변환하여 반환합니다. const_cast 가 성공하려면 T 와 X 유형이 하나의 계층 구조에 속해야 합니다. T 와 X 간의 const 및 volatile 차이는 무시됩니다.
src 객체는 먼저 강력한 참조로 변환됩니다. 해당 변환이 실패할 경우(즉, 객체가 가리키는 대상이 이미 삭제된 경우), 이 함수는 null QSharedPointer 을 반환합니다.
QWeakPointer::toStrongRef(), qSharedPointerStaticCast() 및 qSharedPointerDynamicCast()도 참조하십시오 .
[since 6.9] template <typename X, typename T> QSharedPointer<X> qSharedPointerConstCast(QSharedPointer<T> &&src)
반환된 QSharedPointer 은 src 과 동일한 공유 소유자 집합을 공유합니다.
이 함수 resets 는 성공 시 src 를 nullptr 로 변환합니다.
이 함수는 QSharedPointer::qSharedPointerConstCast(const QSharedPointer<T> &src)를 오버로드합니다.
이 함수는 Qt 6.9에서 도입되었습니다.
QSharedPointer::constCast(), qSharedPointerStaticCast() 및 qSharedPointerDynamicCast()도 참조하십시오 .
template <typename X, typename T> QSharedPointer<X> qSharedPointerDynamicCast(const QSharedPointer<T> &src)
src 가 보유한 포인터에 대한 공유 포인터를 반환하며, X 타입으로의 동적 형변환을 통해 적절한 타입의 내부 포인터를 얻습니다. dynamic_cast 가 실패하면 반환되는 객체는 null이 됩니다.
X 는 T 와 동일한 cv- 한정자(const 및 volatile)를 가져야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. const 속성을 제거하려면 qSharedPointerConstCast 를 사용하십시오.
QSharedPointer::dynamicCast(), qSharedPointerStaticCast() 및 qSharedPointerConstCast()도 참조하십시오 .
template <typename X, typename T> QSharedPointer<X> qSharedPointerDynamicCast(const QWeakPointer<T> &src)
src 가 보유한 포인터에 대한 공유 포인터를 반환하며, X 타입으로의 동적 형변환을 통해 적절한 타입의 내부 포인터를 얻습니다. dynamic_cast 가 실패하면 반환되는 객체는 null이 됩니다.
src 객체는 먼저 강한 참조로 변환됩니다. 해당 변환이 실패할 경우(즉, 해당 객체가 가리키는 대상이 이미 삭제된 경우), 이 함수는 null QSharedPointer 을 반환합니다.
X 는 T 와 동일한 cv-qualifiers(const 및 volatile)를 가져야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. const 속성을 제거하려면 qSharedPointerConstCast 를 사용하십시오.
QWeakPointer::toStrongRef(), qSharedPointerStaticCast() 및 qSharedPointerConstCast()도 참조하십시오 .
[since 6.9] template <typename X, typename T> QSharedPointer<X> qSharedPointerDynamicCast(QSharedPointer<T> &&src)
반환된 QSharedPointer 는 src 과 동일한 공유 소유자 집합과 소유권을 공유합니다.
이 함수 resets 는 성공 시 src 를 nullptr 로 변환합니다.
이 함수는 QSharedPointer::qSharedPointerDynamicCast(const QSharedPointer<T> &src)를 오버로드합니다.
이 함수는 Qt 6.9에서 도입되었습니다.
QSharedPointer::dynamicCast(), qSharedPointerStaticCast() 및 qSharedPointerConstCast()도 참조하십시오 .
template <typename X, typename T> QSharedPointer<X> qSharedPointerObjectCast(const QSharedPointer<T> &src)
qSharedPointerObjectCast 함수는 공유 포인터를 형변환하는 데 사용됩니다.
qobject_cast()를 사용하여 X 의 형식을 지정하고 적절한 형식의 내부 포인터를 얻은 후, src 가 보유한 포인터에 대한 공유 포인터를 반환합니다. qobject_cast 이 실패하면 반환되는 객체는 null이 됩니다.
X 는 T 와 동일한 cv- 한정자(const 및 volatile)를 가져야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. const 속성을 제거하려면 qSharedPointerConstCast 를 사용하십시오.
QSharedPointer::objectCast(), qSharedPointerStaticCast() 및 qSharedPointerConstCast()도 참조하십시오 .
template <typename X, typename T> QSharedPointer<X> qSharedPointerObjectCast(const QWeakPointer<T> &src)
qSharedPointerObjectCast 함수는 공유 포인터를 형변환하는 데 사용됩니다.
qobject_cast()을 사용하여 X 의 타입을 확인한 뒤, 적절한 타입의 내부 포인터를 얻어 src 가 보유한 포인터에 대한 공유 포인터를 반환합니다. qobject_cast 가 실패하면 반환되는 객체는 null이 됩니다.
src 객체는 먼저 강한 참조로 변환됩니다. 해당 변환이 실패할 경우(즉, 가리키는 객체가 이미 삭제된 경우), 이 함수는 null QSharedPointer 을 반환합니다.
X 는 T 와 동일한 cv-자격자(const 및 volatile)를 가져야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. const 속성을 제거하려면 qSharedPointerConstCast 를 사용하십시오.
QWeakPointer::toStrongRef(), qSharedPointerStaticCast() 및 qSharedPointerConstCast()도 참조하십시오 .
template <typename X, typename T> std::shared_ptr<X> qSharedPointerObjectCast(const std::shared_ptr<T> &src)
` src`가 보유한 포인터에 대한 공유 포인터를 반환합니다. 이때 ` qobject_cast()`를 사용하여 ` X `를 타입으로 지정함으로써 적절한 타입의 내부 포인터를 얻습니다. ` qobject_cast `가 실패하면 반환되는 객체는 `null`이 됩니다.
X 는 T 와 동일한 cv-자격자(const 및 volatile)를 가져야 하며, 그렇지 않으면 코드가 컴파일되지 않는다는 점에 유의하십시오. const 속성을 제거하려면 const_pointer_cast를 사용하십시오.
template <typename X, typename T> std::shared_ptr<X> qSharedPointerObjectCast(std::shared_ptr<T> &&src)
` src`가 보유한 포인터에 대한 공유 포인터를 반환하며, ` qobject_cast()`를 사용하여 ` X `의 타입을 확인한 후 적절한 타입의 내부 포인터를 얻습니다.
qobject_cast 가 성공하면, 이 함수는 유효한 공유 포인터를 반환하고 src 는 null로 재설정됩니다. qobject_cast 가 실패하면, 반환되는 객체는 null이 되며 src 는 수정되지 않습니다.
X 는 T 와 동일한 cv- 한정자(const 및 volatile)를 가져야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. const 속성을 제거하려면 const_pointer_cast를 사용하십시오.
[since 6.9] template <typename X, typename T> QSharedPointer<X> qSharedPointerObjectCast(QSharedPointer<T> &&src)
반환된 QSharedPointer 는 src 와 동일한 공유 소유자 집합을 공유합니다.
이 함수 resets 는 성공 시 src 를 nullptr 로 변환합니다.
이 함수는 QSharedPointer::qSharedPointerObjectCast(const QSharedPointer<T> &src)를 오버로드합니다.
이 함수는 Qt 6.9에서 도입되었습니다.
QSharedPointer::objectCast(), qSharedPointerStaticCast() 및 qSharedPointerConstCast()도 참조하십시오 .
[since 6.12] template <typename X, typename T> QSharedPointer<X> qSharedPointerStaticCast(const QSharedPointer<T> &other)
other 가 보유한 포인터에 대한 공유 포인터를, X 타입으로 형변환하여 반환합니다. static_cast 이 성공하려면 T 및 X 타입이 하나의 계층 구조에 속해야 합니다.
X 는 T 와 동일한 cv- 한정자(const 및 volatile)를 가져야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. const 속성을 제거하려면 qSharedPointerConstCast 를 사용하십시오.
이 함수는 Qt 6.12에서 도입되었습니다.
QSharedPointer::staticCast(), qSharedPointerDynamicCast() 및 qSharedPointerConstCast()도 참조하십시오 .
[since 6.12] template <typename X, typename T> QSharedPointer<X> qSharedPointerStaticCast(const QWeakPointer<T> &other)
other 가 보유한 포인터에 대한 공유 포인터를, X 형으로 형변환하여 반환합니다. static_cast 가 성공하려면 T 와 X 유형이 하나의 계층 구조에 속해야 합니다.
other 객체는 먼저 강한 참조로 변환됩니다. 해당 변환이 실패할 경우(즉, 이 객체가 가리키는 객체가 이미 삭제된 경우), 이 함수는 null QSharedPointer 을 반환합니다.
X 는 T 와 동일한 cv-qualified(const 및 volatile)를 가져야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. const 속성을 제거하려면 qSharedPointerConstCast 를 사용하십시오.
이 함수는 Qt 6.12에서 도입되었습니다.
QWeakPointer::toStrongRef(), qSharedPointerDynamicCast() 및 qSharedPointerConstCast()도 참조하십시오 .
[since 6.12] template <typename X, typename T> QSharedPointer<X> qSharedPointerStaticCast(QSharedPointer<T> &&other)
반환된 QSharedPointer 는 other 와 동일한 공유 소유자 집합을 공유합니다.
이 함수 resets 는 성공 시 other 를 nullptr 로 변환합니다.
이 함수는 QSharedPointer::qSharedPointerStaticCast(const QSharedPointer<T> &other)를 오버로드합니다.
이 함수는 Qt 6.12에서 도입되었습니다.
QSharedPointer::staticCast(), qSharedPointerDynamicCast() 및 qSharedPointerConstCast()도 참조하십시오 .
template <typename X, typename T> std::shared_ptr<X> qobject_pointer_cast(const std::shared_ptr<T> &src)
src 가 보유한 포인터에 대한 공유 포인터를 반환합니다.
qSharedPointerObjectCast()과 동일합니다. 이 함수는 STL 호환성을 위해 제공됩니다.
template <typename X, typename T> std::shared_ptr<X> qobject_pointer_cast(std::shared_ptr<T> &&src)
qSharedPointerObjectCast()와 동일합니다. 이 함수는 STL 호환성을 위해 제공됩니다.
template <typename T, typename X> bool operator!=(const QSharedPointer<T> &lhs, const QSharedPointer<X> &rhs)
lhs 와 rhs 가 서로 다른 포인터를 가리키는 경우 true 를 반환합니다.
rhs 의 템플릿 매개변수가 lhs 의 것과 다른 경우, QSharedPointer 는 먼저 두 타입이 호환되는지 확인해야 합니다. 이때 T 와 X 타입을 복합 포인터 타입으로 변환하기 위해 자동 static_cast 을 시도합니다. rhs 의 템플릿 매개변수가 lhs 의 기저 타입이나 파생 타입이 아닌 경우, 컴파일러 오류가 발생합니다.
template <typename T, typename X> bool operator!=(const QSharedPointer<T> &lhs, const X *rhs)
lhs 와 rhs 가 서로 다른 포인터를 가리키는 경우 true 를 반환합니다.
rhs 의 템플릿 매개변수가 lhs 의 것과 다른 경우, QSharedPointer 은 먼저 두 유형이 호환되는지 확인해야 합니다. 이때 T 와 X 유형을 복합 포인터 유형으로 변환하기 위해 자동 static_cast 을 시도합니다. rhs 의 템플릿 매개변수가 lhs 의 기저 유형이나 파생 유형이 아닌 경우, 컴파일러 오류가 발생합니다.
template <typename T> bool operator!=(const QSharedPointer<T> &lhs, std::nullptr_t)
lhs 가 유효한(즉, null이 아닌) 포인터를 가리키는 경우 true 를 반환합니다.
QSharedPointer::isNull()도 참조하십시오 .
template <typename T, typename X> bool operator!=(const T *lhs, const QSharedPointer<X> &rhs)
포인터 lhs 가 rhs 에서 참조하는 포인터와 동일하지 않은 경우 true 를 반환합니다.
rhs 의 템플릿 매개변수가 lhs 의 것과 다른 경우, QSharedPointer 는 먼저 두 유형이 호환되는지 확인해야 합니다. 이 함수는 T 와 X 유형을 복합 포인터 유형으로 변환하기 위해 자동 static_cast 을 시도합니다. rhs 의 템플릿 매개변수가 lhs 의 기저 유형이나 파생 유형이 아닌 경우, 컴파일러 오류가 발생합니다.
template <typename T> bool operator!=(std::nullptr_t, const QSharedPointer<T> &rhs)
rhs 가 유효한(즉, null이 아닌) 포인터를 가리키는 경우 true 를 반환합니다.
QSharedPointer::isNull()도 참조하십시오 .
template <typename T> QDebug operator<<(QDebug debug, const QSharedPointer<T> &ptr)
디버깅을 위해 ptr 에 의해 추적되는 포인터를 디버그 객체 debug 에 기록합니다.
'디버깅 기법'항목도 참조하십시오 .
template <typename T, typename X> bool operator==(const QSharedPointer<T> &lhs, const QSharedPointer<X> &rhs)
lhs 와 rhs 가 동일한 포인터를 가리킬 경우 true 를 반환합니다.
rhs 의 템플릿 매개변수가 lhs 의 것과 다른 경우, QSharedPointer 는 먼저 두 유형이 호환되는지 확인해야 합니다. 이때 T 와 X 유형을 복합 포인터 유형으로 변환하기 위해 자동 static_cast 을 시도합니다. rhs 의 템플릿 매개변수가 lhs 의 기저 유형이나 파생 유형이 아닌 경우, 컴파일러 오류가 발생합니다.
template <typename T, typename X> bool operator==(const QSharedPointer<T> &lhs, const X *rhs)
lhs 와 rhs 가 동일한 포인터를 가리키는 경우 true 를 반환합니다.
rhs 의 템플릿 매개변수가 lhs 의 것과 다른 경우, QSharedPointer 은 먼저 두 유형이 호환되는지 확인해야 합니다. 이때 T 와 X 유형을 복합 포인터 유형으로 변환하기 위해 자동 static_cast 을 시도합니다. rhs 의 템플릿 매개변수가 lhs 의 기저 유형이나 파생 유형이 아닌 경우, 컴파일러 오류가 발생합니다.
template <typename T> bool operator==(const QSharedPointer<T> &lhs, std::nullptr_t)
lhs 가 nullptr 를 가리키는 경우 true 를 반환합니다.
QSharedPointer::isNull()도 참조하십시오 .
template <typename T, typename X> bool operator==(const T *lhs, const QSharedPointer<X> &rhs)
포인터 ` lhs `가 ` rhs`에서 참조하는 포인터와 동일할 경우 ` true `를 반환합니다.
rhs 의 템플릿 매개변수가 lhs 의 것과 다른 경우, QSharedPointer 는 먼저 두 유형이 호환되는지 확인해야 합니다. 이때 T 와 X 유형을 복합 포인터 유형으로 변환하기 위해 자동 static_cast 을 시도합니다. rhs 의 템플릿 매개변수가 lhs 의 기저 유형이나 파생 유형이 아닌 경우, 컴파일러 오류가 발생합니다.
template <typename T> bool operator==(std::nullptr_t, const QSharedPointer<T> &rhs)
rhs 가 nullptr 를 가리키는 경우 true 를 반환합니다.
QSharedPointer::isNull()도 참조하십시오 .
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.