Означает ли это, что класс 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.
}
person
outis
schedule
18.03.2011