Что обозначает такое создание обьекта: 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"); }
В данном коде 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, который передается как аргумент.
В данном коде 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, который передается как аргумент.