QSharedPointer Class
template <typename T> class QSharedPointerQSharedPointer 클래스는 공유 포인터에 대한 강력한 참조를 보유합니다. 더 보기...
Header: | #include <QSharedPointer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
참고: 이 클래스의 모든 함수는 재진입합니다.
공용 함수
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 |
T * | data() const |
QSharedPointer<X> | dynamicCast() const |
T * | get() const |
bool | isNull() const |
QSharedPointer<X> | objectCast() const |
(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 |
void | swap(QSharedPointer<T> &other) |
QWeakPointer<T> | toWeakRef() const |
bool | 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) |
QSharedPointer<X> | qSharedPointerConstCast(const QSharedPointer<T> &src) |
QSharedPointer<X> | qSharedPointerConstCast(const QWeakPointer<T> &src) |
QSharedPointer<X> | qSharedPointerDynamicCast(const QSharedPointer<T> &src) |
QSharedPointer<X> | qSharedPointerDynamicCast(const QWeakPointer<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) |
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> &ptr1, const QSharedPointer<X> &ptr2) |
bool | operator!=(const QSharedPointer<T> &ptr1, const X *ptr2) |
bool | operator!=(const QSharedPointer<T> &lhs, std::nullptr_t) |
bool | operator!=(const T *ptr1, const QSharedPointer<X> &ptr2) |
bool | operator!=(std::nullptr_t, const QSharedPointer<T> &rhs) |
QDebug | operator<<(QDebug debug, const QSharedPointer<T> &ptr) |
bool | operator==(const QSharedPointer<T> &ptr1, const QSharedPointer<X> &ptr2) |
bool | operator==(const QSharedPointer<T> &ptr1, const X *ptr2) |
bool | operator==(const QSharedPointer<T> &lhs, std::nullptr_t) |
bool | operator==(const T *ptr1, const QSharedPointer<X> &ptr2) |
bool | operator==(std::nullptr_t, const QSharedPointer<T> &rhs) |
상세 설명
QSharedPointer는 C++의 자동 공유 포인터입니다. 이 포인터는 컨스턴스 존중을 포함하여 일반적인 목적에 대해 일반 포인터와 똑같이 동작합니다.
QSharedPointer는 범위를 벗어나면 다른 QSharedPointer 객체가 참조하고 있지 않다면 보유하고 있는 포인터를 삭제합니다.
QSharedPointer 객체는 일반 포인터, 다른 QSharedPointer 객체 또는 QWeakPointer 객체를 강력한 참조로 승격하여 만들 수 있습니다.
스레드 안전
QSharedPointer와 QWeakPointer 는 재진입 클래스입니다. 즉, 일반적으로 동기화 없이 여러 스레드에서 동시에 주어진 QSharedPointer 또는 QWeakPointer 객체에 액세스할 수 없습니다.
여러 스레드에서 동시에 서로 다른 QSharedPointer와 QWeakPointer 객체에 안전하게 액세스할 수 있습니다. 여기에는 동일한 객체에 대한 포인터를 보유하는 경우가 포함되며, 참조 카운팅 메커니즘은 원자적이며 수동 동기화가 필요하지 않습니다.
이러한 방식으로(즉, 동기화 없이 여러 스레드에서 동시에) 포인터 값에 액세스할 수 있지만, QSharedPointer와 QWeakPointer 는 가리키는 객체에 대한 보장을 제공하지 않는다는 점에 유의해야 합니다. 해당 객체에 대한 특정 스레드 안전 및 재진입 규칙이 여전히 적용됩니다.
기타 포인터 클래스
Qt는 또한 QPointer 와 QSharedDataPointer 라는 두 개의 다른 포인터 래퍼 클래스를 제공합니다. 이 두 클래스는 각각 매우 다른 사용 사례를 가지고 있기 때문에 서로 호환되지 않습니다.
QSharedPointer는 외부 참조 카운트(즉, 객체 외부에 배치된 참조 카운터)를 통해 공유 포인터를 보유합니다. 이름에서 알 수 있듯이 포인터 값은 QSharedPointer와 QWeakPointer 의 모든 인스턴스 간에 공유됩니다. 그러나 포인터가 가리키는 객체의 내용은 공유된 것으로 간주해서는 안 됩니다. 객체는 하나만 존재하기 때문입니다. 이러한 이유로 QSharedPointer는 가리키는 객체를 분리하거나 복사하는 방법을 제공하지 않습니다.
QSharedDataPointer반면에 , 는 공유 데이터에 대한 포인터(즉, QSharedData 에서 파생된 클래스)를 보유합니다. 이는 QSharedData 베이스 클래스에 배치된 내부 참조 카운트를 통해 이루어집니다. 따라서 이 클래스는 보호 중인 데이터에 대한 액세스 유형에 따라 분리될 수 있습니다. 생성되지 않은 액세스인 경우, 작업이 완료될 때까지 원자적으로 복사본을 생성합니다.
QExplicitlySharedDataPointer 는 QSharedDataPointer 의 변형이지만 QExplicitlySharedDataPointer::detach()이 명시적으로 호출된 경우에만 분리된다는 점을 제외하면 이름 그대로입니다.
QScopedPointer 는 단순히 힙에 할당된 객체에 대한 포인터를 보유하고 있다가 해당 소멸자에서 삭제합니다. 이 클래스는 객체를 힙에 할당하고 삭제해야 할 때 유용하지만 그 이상은 필요하지 않습니다. QScopedPointer 는 가볍기 때문에 추가 구조나 참조 카운팅을 사용하지 않습니다.
마지막으로 QPointer 는 QObject 파생 객체에 대한 포인터를 보유하지만 기능이 약합니다. QWeakPointer 는 동일한 기능을 가지고 있지만 해당 함수에 대한 사용은 더 이상 사용되지 않습니다.
선택적 포인터 추적
디버깅 목적으로 컴파일 타임에 활성화할 수 있는 QSharedPointer의 기능은 포인터 추적 메커니즘입니다. 이 기능을 활성화하면 QSharedPointer는 추적하는 모든 포인터를 전역 집합에 등록합니다. 이를 통해 두 개의 QSharedPointer 객체에 동일한 포인터를 할당하는 것과 같은 실수를 포착할 수 있습니다.
이 기능은 QSharedPointer 헤더를 포함하기 전에 QT_SHAREDPOINTER_TRACK_POINTERS
매크로를 정의하여 활성화할 수 있습니다.
이 기능을 사용하지 않고 컴파일한 코드에서도 이 기능을 안전하게 사용할 수 있습니다. 포인터 추적 없이 컴파일된 코드에서도 QSharedPointer는 포인터가 트래커에서 제거되도록 합니다.
그러나 포인터 추적 기능은 다중 또는 가상 상속(즉, 서로 다른 두 포인터 주소가 동일한 객체를 참조할 수 있는 경우)에 제한이 있다는 점에 유의하세요. 이 경우 포인터가 다른 타입으로 형변환되고 그 값이 변경되면 QSharedPointer의 포인터 추적 메커니즘이 추적 중인 객체가 동일하다는 것을 감지하지 못할 수 있습니다.
QSharedDataPointer, QWeakPointer, QScopedPointer, QEnableSharedFromThis 을참조하십시오 .
멤버 함수 문서
[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 를참조하십시오 .
QSharedPointer::QSharedPointer()
널(객체가 nullptr
에 대한 참조를 보유하고 있음)인 QSharedPointer를 생성합니다.
[noexcept]
template <typename X> QSharedPointer::QSharedPointer(QSharedPointer<X> &&other)
Move는 QSharedPointer 인스턴스를 생성하여 other 가 가리키던 것과 동일한 객체를 가리키도록 합니다.
이 생성자는 X*
가 T*
로 암시적으로 변환되는 경우에만 과부하 해결에 참여합니다.
[explicit]
template <typename X> QSharedPointer::QSharedPointer(X *ptr)
ptr 을 가리키는 QSharedPointer를 생성합니다. ptr 포인터는 이 QSharedPointer에 의해 관리되며 다른 QSharedPointer 객체로 전달되거나 이 객체 외부에서 삭제되어서는 안 됩니다.
Qt 5.8부터 이 QSharedPointer에 대한 마지막 참조가 소멸되면 X
의 소멸자를 호출하여 ptr 가 삭제됩니다 ( X
가 QSharedPointer의 템플릿 파라미터 T
와 동일하지 않더라도 ). 이전에는 T
의 소멸자가 호출되었습니다.
QSharedPointer::QSharedPointer(const QWeakPointer<T> &other)
약한 참조 other 를 강한 참조로 승격하고 그 포인터를 공유하여 QSharedPointer를 생성합니다.
T
이 이 클래스의 템플릿 매개변수의 파생 유형인 경우, QSharedPointer는 자동 형변환을 수행합니다. 그렇지 않으면 컴파일러 오류가 발생합니다.
QWeakPointer::toStrongRef()도 참조하세요 .
QSharedPointer::QSharedPointer(std::nullptr_t)
널인 QSharedPointer를 생성합니다. 이는 QSharedPointer 기본 생성자와 동일합니다.
template <typename X, typename Deleter> QSharedPointer::QSharedPointer(X *ptr, Deleter d)
ptr 을 가리키는 QSharedPointer를 만듭니다. ptr 포인터는 이 QSharedPointer에 의해 관리되며 이 객체 외부로 전달되거나 삭제되어서는 안 됩니다.
deleter 매개변수 d 는 이 객체에 대한 사용자 지정 삭제자를 지정합니다. 사용자 지정 삭제자는 강력한 참조 수가 0으로 떨어지면 삭제() 연산자 대신 호출됩니다. 예를 들어 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)
널인 QSharedPointer를 생성합니다. 이것은 QSharedPointer 기본 생성자와 동일합니다.
deleter 매개변수 d 는 이 객체에 대한 사용자 지정 삭제자를 지정합니다. 강력한 참조 수가 0으로 떨어지면 삭제() 연산자 대신 사용자 정의 삭제자가 호출됩니다.
QSharedPointer::QSharedPointer(const QSharedPointer<T> &other)
other 의 포인터를 공유하는 QSharedPointer 객체를 만듭니다.
T
이 이 클래스의 템플릿 매개변수의 파생 유형인 경우, QSharedPointer는 자동 형변환을 수행합니다. 그렇지 않으면 컴파일러 오류가 발생합니다.
[noexcept]
QSharedPointer::QSharedPointer(QSharedPointer<T> &&other)
Move - QSharedPointer 인스턴스를 생성하여 other 이 가리키고 있던 것과 동일한 객체를 가리키도록 합니다.
QSharedPointer::~QSharedPointer()
이 QSharedPointer 객체를 삭제합니다. 저장된 포인터에 대한 마지막 참조인 경우 포인터도 삭제됩니다.
void QSharedPointer::clear()
이 QSharedPointer 객체를 지우고 포인터에 대한 참조를 삭제합니다. 이것이 마지막 참조인 경우 포인터 자체가 삭제됩니다.
template <typename X> QSharedPointer<X> QSharedPointer::constCast() const
이 포인터의 유형에서 X
으로 const_cast
을 수행하여 참조를 공유하는 QSharedPointer 을 반환합니다. 이 함수는 업 캐스팅과 다운 캐스팅에 모두 사용할 수 있지만 업 캐스팅에 더 유용합니다.
isNull() 및 qSharedPointerConstCast()도 참조하세요 .
[static]
template <typename... Args> QSharedPointer<T> QSharedPointer::create(Args &&... args)
이것은 오버로드된 함수입니다.
QSharedPointer 객체를 생성하고 T
유형의 새 항목을 할당합니다. QSharedPointer 내부와 객체는 하나의 단일 메모리 할당으로 할당되므로 장기 실행 애플리케이션에서 메모리 조각화를 줄이는 데 도움이 될 수 있습니다.
이 함수는 전달된 모든 인수를 받아들일 수 있는 T
유형의 생성자를 호출하려고 시도합니다(args). 인수는 완벽하게 전달됩니다.
T *QSharedPointer::data() const
이 객체가 참조하는 포인터의 값을 반환합니다.
참고: 이 함수가 반환한 포인터를 삭제하거나 QSharedPointer 또는 QWeakPointer 객체를 만드는 등 삭제할 수 있는 다른 함수에 전달하지 마세요.
template <typename X> QSharedPointer<X> QSharedPointer::dynamicCast() const
이 포인터의 형에서 X
로 동적 형변환을 수행하고 참조를 공유하는 QSharedPointer 을 반환합니다. 이 함수를 사용하여 업캐스트하는 경우 QSharedPointer 은 dynamic_cast
을 수행합니다. 즉, 이 QSharedPointer 이 가리키는 객체가 X
유형이 아닌 경우 반환되는 객체는 null이 됩니다.
참고: 템플릿 유형 X
에는 이 객체의 템플릿과 동일한 const 및 휘발성 한정자가 있어야 하며, 그렇지 않으면 형변환이 실패합니다. 이러한 한정자를 삭제해야 하는 경우 constCast()를 사용하세요.
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 및 휘발성 한정자가 있어야 하며, 그렇지 않으면 형변환이 실패합니다. 이러한 한정자를 삭제해야 하는 경우 constCast()를 사용하세요.
qSharedPointerObjectCast()도 참조하세요 .
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)
삭제자 deleter 를 사용하여 이 QSharedPointer 객체를 t 을 가리키도록 재설정합니다. 와 동일합니다:
QSharedPointer<T> other(t, deleter); this->swap(other);
template <typename X> QSharedPointer<X> QSharedPointer::staticCast() const
이 포인터의 유형에서 X
로 정적 캐스팅을 수행하고 참조를 공유하는 QSharedPointer 을 반환합니다. 이 함수는 업 캐스팅과 다운 캐스팅에 모두 사용할 수 있지만 업 캐스팅에 더 유용합니다.
참고: 템플릿 유형 X
에는 이 객체의 템플릿과 동일한 const 및 휘발성 한정자가 있어야 하며, 그렇지 않으면 형변환이 실패합니다. 이러한 한정자를 삭제해야 하는 경우 constCast()를 사용하세요.
dynamicCast(), constCast() 및 qSharedPointerCast()도 참조하세요 .
[noexcept]
void QSharedPointer::swap(QSharedPointer<T> &other)
이 공유 포인터 인스턴스를 other 로 바꿉니다. 이 작업은 매우 빠르며 실패하지 않습니다.
QWeakPointer<T> QSharedPointer::toWeakRef() const
이 객체가 참조하는 포인터를 공유하는 약한 참조 객체를 반환합니다.
QWeakPointer::QWeakPointer()도 참조하세요 .
bool 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
유형으로 캐스팅합니다. T
및 X
유형은 static_cast
이 성공하려면 하나의 계층 구조에 속해야 합니다.
X
에는 T
과 동일한 cv 한정자(const
및 volatile
)가 있어야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. qSharedPointerConstCast 을 사용하여 constness를 제거하세요.
QSharedPointer::staticCast(), qSharedPointerDynamicCast() 및 qSharedPointerConstCast()도 참조하세요 .
template <typename X, typename T> QSharedPointer<X> qSharedPointerCast(const QWeakPointer<T> &other)
other 이 보유한 포인터에 대한 공유 포인터를 반환하고 X
유형으로 캐스팅합니다. T
및 X
유형이 성공하려면 static_cast
이 하나의 계층 구조에 속해야 합니다.
other 객체는 먼저 강력한 참조로 변환됩니다. 이 변환이 실패하면(가리키는 객체가 이미 삭제되었기 때문에) 이 함수는 null QSharedPointer 을 반환합니다.
X
에는 T
과 동일한 cv 한정자(const
및 volatile
)가 있어야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. qSharedPointerConstCast 을 사용하여 constness를 버리세요.
QWeakPointer::toStrongRef(), qSharedPointerDynamicCast() 및 qSharedPointerConstCast()도 참조하세요 .
template <typename X, typename T> QSharedPointer<X> qSharedPointerConstCast(const QSharedPointer<T> &src)
src 이 보유한 포인터에 대한 공유 포인터를 반환하고 X
유형으로 캐스팅합니다. T
및 X
유형은 const_cast
이 성공하려면 하나의 계층 구조에 속해야 합니다. T
및 X
사이의 const
및 volatile
차이는 무시됩니다.
QSharedPointer::constCast(), qSharedPointerCast() 및 qSharedPointerDynamicCast()도 참조하세요 .
template <typename X, typename T> QSharedPointer<X> qSharedPointerConstCast(const QWeakPointer<T> &src)
src 이 보유한 포인터에 대한 공유 포인터를 반환하고 X
유형으로 캐스팅합니다. T
및 X
유형은 const_cast
이 성공하려면 하나의 계층 구조에 속해야 합니다. T
및 X
사이의 const
및 volatile
차이는 무시됩니다.
src 객체가 먼저 강력한 참조로 변환됩니다. 이 변환이 실패하면(가리키는 객체가 이미 삭제되었기 때문에) 이 함수는 null QSharedPointer 을 반환합니다.
QWeakPointer::toStrongRef(), qSharedPointerCast() 및 qSharedPointerDynamicCast()도 참조하세요 .
template <typename X, typename T> QSharedPointer<X> qSharedPointerDynamicCast(const QSharedPointer<T> &src)
src 이 보유한 포인터에 대한 공유 포인터를 반환하고, 동적 형변환을 사용하여 X
유형으로 변환하여 적절한 유형의 내부 포인터를 얻습니다. dynamic_cast
이 실패하면 반환되는 객체는 null이 됩니다.
X
에는 T
과 동일한 cv 한정자(const
및 volatile
)가 있어야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. qSharedPointerConstCast 을 사용하여 constness를 버리세요.
QSharedPointer::dynamicCast(), qSharedPointerCast() 및 qSharedPointerConstCast()도 참조하세요 .
template <typename X, typename T> QSharedPointer<X> qSharedPointerDynamicCast(const QWeakPointer<T> &src)
src 이 보유한 포인터에 대한 공유 포인터를 반환하고, 동적 형변환을 사용하여 X
유형으로 변환하여 적절한 유형의 내부 포인터를 얻습니다. dynamic_cast
호출이 실패하면 반환되는 객체는 null이 됩니다.
src 객체는 먼저 강력한 참조로 변환됩니다. 이 변환이 실패하면(가리키는 객체가 이미 삭제되었기 때문에) 이 함수 역시 null QSharedPointer 을 반환합니다.
X
에는 T
과 동일한 cv 한정자(const
및 volatile
)가 있어야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. qSharedPointerConstCast 을 사용하여 constness를 버리세요.
QWeakPointer::toStrongRef(), qSharedPointerCast() 및 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
)가 있어야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. qSharedPointerConstCast 을 사용하여 constness를 버리세요.
QSharedPointer::objectCast(), qSharedPointerCast() 및 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
)가 있어야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. qSharedPointerConstCast 을 사용하여 constness를 버리세요.
QWeakPointer::toStrongRef(), qSharedPointerCast() 및 qSharedPointerConstCast()도 참조하세요 .
template <typename X, typename T> std::shared_ptr<X> qSharedPointerObjectCast(const std::shared_ptr<T> &src)
qobject_cast()를 사용하여 X
를 입력하여 적절한 유형의 내부 포인터를 가져오는 ()를 사용하여 src 가 보유한 포인터에 대한 공유 포인터를 반환합니다. qobject_cast
이 실패하면 반환되는 객체는 null이 됩니다.
X
에는 T
과 동일한 cv 한정자(const
및 volatile
)가 있어야 하며, 그렇지 않으면 코드가 컴파일에 실패합니다. const_pointer_cast를 사용하여 const를 캐스팅합니다.
template <typename X, typename T> std::shared_ptr<X> qSharedPointerObjectCast(std::shared_ptr<T> &&src)
qobject_cast()를 사용하여 X
을 입력하여 적절한 유형의 내부 포인터를 얻은 후 src 이 보유한 포인터에 대한 공유 포인터를 반환합니다.
qobject_cast
이 성공하면 함수는 유효한 공유 포인터를 반환하고 src 은 null로 재설정됩니다. qobject_cast
함수가 실패하면 반환되는 객체는 null이 되고 src 은 수정되지 않습니다.
X
에는 T
과 동일한 cv 한정자(const
및 volatile
)가 있어야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다. const_pointer_cast를 사용하여 const를 캐스팅합니다.
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> &ptr1, const QSharedPointer<X> &ptr2)
ptr1 과 ptr2 이 서로 다른 포인터를 참조하는 경우 true
을 반환합니다.
ptr2 의 템플릿 매개변수가 ptr1 의 매개변수와 다른 경우 QSharedPointer 는 비교 중인 포인터가 동일한지 확인하기 위해 자동 static_cast
을 수행하려고 시도합니다. ptr2 의 템플릿 매개변수가 ptr1 의 기본 또는 파생 유형이 아닌 경우 컴파일러 오류가 발생합니다.
template <typename T, typename X> bool operator!=(const QSharedPointer<T> &ptr1, const X *ptr2)
ptr1 과 ptr2 이 서로 다른 포인터를 참조하는 경우 true
을 반환합니다.
ptr2 의 유형이 ptr1 의 유형과 다른 경우 QSharedPointer 는 비교 중인 포인터가 동일한지 확인하기 위해 자동 static_cast
을 수행하려고 시도합니다. ptr2 의 타입이 기본 타입이 아니거나 ptr1 의 타입에서 파생된 타입이면 컴파일러 오류가 발생합니다.
template <typename T> bool operator!=(const QSharedPointer<T> &lhs, std::nullptr_t)
lhs 이 유효한(즉, 널이 아닌) 포인터를 참조하는 경우 true
을 반환합니다.
QSharedPointer::isNull()도 참조하세요 .
template <typename T, typename X> bool operator!=(const T *ptr1, const QSharedPointer<X> &ptr2)
ptr1 포인터가 ptr2 에서 참조하는 포인터와 동일한 포인터가 아닌 경우 true
을 반환합니다.
ptr2 의 템플릿 매개변수가 ptr1 의 타입과 다른 경우, QSharedPointer 는 비교 중인 포인터가 동일한지 확인하기 위해 자동 static_cast
을 수행합니다. ptr2 의 템플릿 매개변수가 ptr1 의 유형에서 기본 또는 파생된 유형이 아닌 경우 컴파일러 오류가 발생합니다.
template <typename T> bool operator!=(std::nullptr_t, const QSharedPointer<T> &rhs)
rhs 이 유효한(즉, 널이 아닌) 포인터를 참조하는 경우 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> &ptr1, const QSharedPointer<X> &ptr2)
ptr1 과 ptr2 이 동일한 포인터를 참조하는 경우 true
을 반환합니다.
ptr2 의 템플릿 매개변수가 ptr1 의 매개변수와 다른 경우 QSharedPointer 는 비교 중인 포인터가 동일한지 확인하기 위해 자동 static_cast
을 수행하려고 시도합니다. ptr2 의 템플릿 매개변수가 ptr1 의 기본 또는 파생 유형이 아닌 경우 컴파일러 오류가 발생합니다.
template <typename T, typename X> bool operator==(const QSharedPointer<T> &ptr1, const X *ptr2)
ptr1 과 ptr2 이 동일한 포인터를 참조하는 경우 true
을 반환합니다.
ptr2 의 유형이 ptr1 의 유형과 다른 경우 QSharedPointer 는 비교 중인 포인터가 동일한지 확인하기 위해 자동 static_cast
을 수행하려고 시도합니다. ptr2 의 유형이 기본 유형이 아니거나 이 ptr1 의 파생 유형이 아닌 경우 컴파일러 오류가 발생합니다.
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 *ptr1, const QSharedPointer<X> &ptr2)
ptr1 포인터가 ptr2 에서 참조하는 포인터와 동일한 경우 true
를 반환합니다.
ptr2 의 템플릿 매개변수가 ptr1 의 타입과 다른 경우, QSharedPointer 는 비교 중인 포인터가 동일한지 확인하기 위해 자동 static_cast
을 시도합니다. ptr2 의 템플릿 매개변수가 ptr1 의 유형에서 기본 또는 파생된 유형이 아닌 경우 컴파일러 오류가 발생합니다.
template <typename T> bool operator==(std::nullptr_t, const QSharedPointer<T> &rhs)
rhs 이 nullptr
을 참조하는 경우 true
을 반환합니다.
QSharedPointer::isNull()도 참조하세요 .
© 2025 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.