Повторное удаление указателя

248
01 марта 2017, 21:58

При вызове конструктора копий указатели ссылаются на один и тот же указатель. И при вызове деструктора повторное удаление указателя. Вопрос состит в том, как правильное реализовать конструктора копий, что бы в дальнейшем не происходило повторное удаление указателя.

#include <iostream>
class Io
{
    public:
        Io (int v) : val(v){};
        virtual ~Io (){};
        int getValue(){return val;}
    private:
        int val;
};
class Count
{
    public:
        Count (Io _io):io_ptr(new Io(_io)){};
        virtual ~Count (){delete io_ptr;};
        Count(const Count &_io)
        {
            std::cout << "COPPY" << std::endl;
        }
        Io* getIo()const{return io_ptr;}
    private:
        Io *io_ptr;
};
int main (int argc, char const* argv[])
{
    Count c(Io(12));
    Count c2(c);
    return 0;
}
Answer 1

Например, так:

Count(const Count &_io):io_ptr(new Io(_io.io_ptr->getValue()))
{
    std::cout << "COPPY" << std::endl;
}
READ ALSO
Тривиальное хеширование [требует правки]

Тривиальное хеширование [требует правки]

Доброго времени суток! Можете привести пример тривиального хеширования? В интернете не смогла найти никакой понятной информации

570
Как изменить разрешение картинки RGB в буфере?

Как изменить разрешение картинки RGB в буфере?

Скриншот экрана хранится в буфере в виде байт RGBНужно независимо от его исходных размеров привести его к разрешению 1280х720

312
Спецификатор final для функции

Спецификатор final для функции

При добавлении спецификатора final мы запрещаем переопределять метод в базовом классеТогда зачем нам нужен в базовом классе создавать виртуальный...

304
Печать двух страниц на одном листе

Печать двух страниц на одном листе

Как мне в Qt5 настроить так чтобы на одном листе A4 печатать два формата A5?

251