Что обозначает такое создание обьекта: SmartPointer sp? Пишу код по видео уроку, класс умных указателей. Не понимаю, что за определение обьекта такое: SmartPointer sp(new Foo(2,2)); для чего здесь <> скобки?
И еще, как указатель может быть void: std::ptrdiff_t operator -(void *p) это что, ссылка на ничего?
Поясните, пожалуйста значение <> скобок.
Вот код:#include
template
class SmartPointer {
Type* pointer;
public:
SmartPointer(Type* p) : pointer(p) {};
operator Type*() { return pointer; };
Type *operator->() {
if (!pointer) {
pointer = new Type();
std::cerr p) {
return pointer - p;
}
std::ptrdiff_t operator -(void *p) {
return pointer - p;
}
};
class Foo {
int a, b;
public:
Foo() : a(0), b(0) {};
Foo(int a, int b) : a(a), b(b) {};
int sum() { return a + b; }
};
int main(int argc, char **argv) {
SmartPointer sp(new Foo(2,2));
std::cout sum() >void");
}

21 Авг 2019 в 07:04
166 +1
0
Ответы
1

В данном коде SmartPointer<Foo> sp(new Foo(2,2)); создается объект sp класса SmartPointer для типа Foo, в котором переменная pointer будет указывать на объект типа Foo, созданный с помощью оператора new и переданного в конструктор SmartPointer. То есть sp будет являться "умным указателем" на объект типа Foo.

Угловые скобки <> используются для указания шаблонного параметра класса SmartPointer, в данном случае Type заменяется на Foo, указывая, что SmartPointer будет работать с типом Foo.

Что касается оператора -, то при объявлении std::ptrdiff_t operator -(void *p) данный оператор используется для вычисления разницы между указателями. void *p означает указатель на ничто, он не указывает на конкретный тип данных. Таким образом, оператор - в данном случае рассчитывает разницу между указателем, хранящимся в объекте SmartPointer, и указателем типа void, который передается как аргумент.

20 Апр в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 989 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир