Использование new

166
30 декабря 2019, 08:30

В нескольких примерах на просторах сети можно найти следующие вещи. Допустим имеем несколько определений:

class foo{
protected:
    int* numb;
public: 
    foo(int* ptr_to_numb){
        this->number = ptr_to_numb;
    }
    ~foo(){
        delete this->numb;
    }
}
void show_int(int* ptr_to_number){
    std::cout << *ptr_to_number << std::endl;
}

Затем выполним:

foo exmpl(new int(7));
show_int(new int(7));

Что будет с аргументами, переданными в конструктор и функцию? (Если не принимать во внимание оптимизаций компилятора)

Answer 1

В вашем примере delete уже наличествует в деструкторе foo. Именно оно, по замыслу автора класса, и должно удалить объект, указатель на который вы передавали в конструктор.

Что касается варианта с функцией, то в вашем варианте вы можете либо удалить объект внутри функции, либо где-то запомнить указатель на него для долгосрочного хранения (и последующего удаления).

То, что написано в варианте с функцией у вас сейчас, порождает классическую утечку памяти - объект не удаляется и доступ к нему теряется безвозвратно.

READ ALSO
Задача на С++ олимпиадная

Задача на С++ олимпиадная

Вокруг ведущего стоит N человек, которые пронумерованы по часовой стрелку числами от 1 до NВедущий, начиная с первого отсчитывает M человек...

164
Как вывести определенную часть файла?

Как вывести определенную часть файла?

Пишу несложную базу данных (использую простоtxt файлы) на c++ Вот так выглядят данные в файле

206
QWebEnginePage findText всегда false

QWebEnginePage findText всегда false

Не могу разобраться почему у меня не работает findText в QWebEnginePage, я точно знаю что текст на странице есть, а он пишет false:

147
Не проходит 10 тест на acmp (задача 65) [закрыт]

Не проходит 10 тест на acmp (задача 65) [закрыт]

Хотите улучшить этот вопрос? Update the question so it's on-topic for Stack Overflow на русском

151