Означает ли это, что класс TestPtr является производным от класса Test?
Нет. TestPtr
является производным от QSharedPointer
.
Включен ли тест класса в интеллектуальный указатель?
Да. Скорее, QSharedPointer<Test>
- это класс интеллектуальных указателей, который управляет указателями Test
.
Я прочитал, что QSharedpointer - это шаблонный класс. Может кто-нибудь уточнить, пожалуйста?
Шаблоны абстрагируют типы, аналогичные тому, как функции абстрагируют значения от операций. Например,
int i,j;
...
i = 2*i+1;
j = 2*j+1;
может быть абстрагировано до:
void foo(int &x) {
x = 2*x + i;
}
...
int i,j,
...
foo(i);
foo(j);
Аналогично, вместо того, чтобы иметь отдельные классы, такие как:
class IntSharedPtr { typedef int value_type; ... };
class FloatSharedPtr { typedef float value_type; ...};
Вы можете иметь шаблон класса:
template <typename _T>
class SharedPtr { typedef _T value_type; ...};
typedef SharedPtr<int> IntSharedPtr;
typedef SharedPtr<float> FloatSharedPtr;
Наконец, protected
означает, что члены QSharedPointer
доступны только в TestPtr
по TestPtr
и его потомкам. Предположим, что TestPtr
не переопределяет operator *
и имеет конструктор, который принимает Test
(или ссылку на Test
). В результате ограничения доступа произойдет следующее:
int main() {
Test bar;
TestPtr pbar(bar);
*pbar; // Error: QSharedPointer<Test>::operator *() is protected within this context.
}