Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (7)

Лучшие ответы пользователя

Все ответы (19)
  • Как не превратиться в мамонта?

    @laphroaig
    Есть разница между тем когда ты знаешь, чего ты не знаешь и тем, когда ты не знаешь чего ты не знаешь. В первом случае ты знаешь, что тебе нужно узнать для решения конкретной задачи, а во втором просто тупишь.
    Ответ написан
    1 комментарий
  • Есть ли возможность в C++ объявить массив массивов из темплейтных классов с аргументами от 1 до N?

    @laphroaig
    Ну как то так:

    #include <iostream>
    
    template <size_t size>
    class B {
      const size_t data[size];
    };
    
    
    template<size_t size>
    class A
      : public A<size-1>
    {
        B<size> items[size];
    };
    
    template<>
    class A<0>
    {
    };
    
    int main()
    {
       std::cout << sizeof(A<10>) << std::endl; 
    }
    Ответ написан
    7 комментариев
  • В чем ошибка (работа с памятью, деструкторы)?

    @laphroaig
    При передаче объекта по значению происходит его копирование, но динамически выделенная память не копируется, а только значение указателя _coords. В результате у вас два объекта которые ссылаются на один и тот же массив. По завершению работы Dist копия объекта уничтожается с вызовом деструктора и освобождением памяти. А по завершению работы программы вызываются деструкторы объектов A и B в которых происходит попытка освободить память для _coords второй раз, а это неопределенное поведения (undefined behaviour) другими словами может произойти вообще что угодно.

    Вам нужно самому реализовать конструктор копирования или запретить его. Когда вы просто удаляете деструктор происходит утечка памяти, когда передаете по ссылке объекты не копируются поэтому всё норм. Если объект динамически выделяет память, например с помощью new или delete, то реализация конструктора копирования обязательна. Можно также его запретить перенеся конструктор копирования в приватную секцию или для c++11 объявить Point(const Point&) = delete; В этом случае передача такого объекта по значению приведет к ошибке компиляции. Это важная тема изучите ее.

    Все что выделено с помощью new [] удаляется только с помощью delete[]
    Ответ написан
    1 комментарий
  • Как преобразовать NULL const char* в string?

    @laphroaig
    убрать NULL из имени типа
    какой вопрос, такой ответ
    Ответ написан
    1 комментарий
  • Каким должен быть паттерн Adapter?

    @laphroaig
    Адаптер - это как переходник в с usb на type-c например. У тебя есть клиент который работает с UsbInterface и некоторый класс, который делает все, что нужно клиенту, но имеет TypeCInterface. Т.е. мы не можем просто передать указатель на него клиенту. Можно конечно реализовать в таком классе и UsbInterface, но это не всегда разумно и возможно. Адаптер, в данном случае, будет реализовывать UsbInterface и перенаправлять запросы целевому объекту вызывая соответствующие методы TypeCInterface
    Ответ написан
    Комментировать