C ++ Удаление указателя с помощью функции - PullRequest
1 голос
/ 05 апреля 2020

У меня есть один вопрос. Можно ли удалить указатель с функцией? Это мой пример:

void deletePointer(auto* pointer)
{
    delete pointer;
    pointer = nullptr;
}

int main()
{
    int value = 5;
    int* value_ptr = &value;

    //Some code

    deletePointer(value_ptr);

    return 0;
}

И это не работает. Я также попытался добавить ключевое слово "inline" к функции и с помощью лямбды.

auto deletePointer = [&](auto* pointer) -> void
{
    delete pointer;
    pointer = nullptr;
}

Я думаю, что он удаляет только указатель внутри функции, лямбда. Можно ли сделать функцию, которая будет удалять указатель, который передается функции?

1 Ответ

2 голосов
/ 05 апреля 2020

Решение.

Я узнал, что delete можно использовать только при создании объекта с использованием new. Таким образом, я немного изменил код.

#include <iostream>

void deletePointer(auto*& pointer)
{
    delete pointer;
    pointer = nullptr;
}

int main()
{
    int* ptr = new int(5);

    deletePointer(ptr);

    if (ptr == nullptr) std::cout << "Succeed";
    else std::cout << "Failed";

    return 0;
}

И данный вывод из кода: Succeed. Так что теперь все работает. Спасибо за помощь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...