Задать вопрос
@NikHaker
/

Что обозначает такое создание обьекта: SmartPointer sp?

Пишу код по видео уроку, класс умных указателей. Не понимаю, что за определение обьекта такое: SmartPointer<Foo> sp(new Foo(2,2)); для чего здесь <> скобки?
И еще, как указатель может быть void: std::ptrdiff_t operator -(void *p) это что, ссылка на ничего?
Поясните, пожалуйста значение <> скобок.
Вот код:
#include <iostream>

template <class Type>

class SmartPointer {
	Type* pointer;
public:
	SmartPointer(Type* p) : pointer(p) {};
	operator Type*() { return pointer; };
	Type *operator->() { 
		if (!pointer) {
			pointer = new Type();
			std::cerr << "Bad Ponter!" << std::endl;
		}
		return pointer; 
	};
	std::ptrdiff_t operator -(SmartPointer<type> 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<Foo> sp(new Foo(2,2));
	std::cout << sp->sum() << std::endl;
	system("pause>>void");
}
  • Вопрос задан
  • 246 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Rou1997
@Rou1997
Есть типы(классы)-"дженерики", их функционал зависит от типа шаблона, например класс Array<T>, где T - какой-либо тип, скажем, Array<int> - это будет массив int'ов, Array<std::string> - массив std::string'ов и т.д., в данном случае класс SmartPointer<Foo> sp; реализует "умный указатель" вида Foo* sp;

И еще, как указатель может быть void: std::ptrdiff_t operator -(void *p) это что, ссылка на ничего?

void* - "универсальный" тип указателя, к нему можно привести указатель любого типа, также как и к int, где в int будет число - адрес (номер ячейки) в памяти, где содержатся данные, на которые вы указываете.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
В угловых скобках указываются параметры шаблона.
О шаблонах рассказано с первых страниц любой книги для чайников.
Ответ написан
Комментировать
Умные указатели делаются при помощи шаблонных классов, так что читайте, что такое шаблоны: microsin.net/programming/pc/an-idiots-guide-to-cpp...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы