Деструктор C++: введите '***' аргумент, данный для 'удаления', ожидаемый указатель

вы передаете идентификатор партнера , а не партнер объект коллекции

, так что используйте это

public function update(Request $request, $id)
    {
        $this->validate($request, [
            'name' => 'required|string|max:255',
            'image' => 'sometimes|image|mimes:jpg,jpeg,png',
        ]);

        $partner = Modelname::findOrFail($id);   //add this line (add your modelname)
        $partner->update([
            'name' => $request['name'],
        ]);
        if (request()->file('image')) {
            $partner->update([
                'image' => request()->file('image')->store('images', 'public'),
            ]);
        }
        return redirect()->route('partner.index', $partner);
    }
12
задан Bill Xia 12 May 2014 в 15:45
поделиться

7 ответов

Если новый и удаляют, идут рука об руку.

Для удаления чего-то, необходимо создать его через новый (который дает Вам подсказку). Можно затем удалить указатель. Путем Вы объявляете вектор, он создается на стеке (не "куча") и будет освобожден, когда он выходит из объема.

int main()
{
    vector<SomeClass> theVector;

    vector<SomeClass>* ptrVctor = new vector<SomeClass>();


    delete ptrVctor;   // ptrVctor must be deleted manually
    // theVector destroyed automatically here
}
19
ответ дан 2 December 2019 в 04:09
поделиться

В C++ (в отличие от Java), можно создать объекты или на стеке или на "куче". Пример создания его на стеке, поскольку Вы сделали:

vector<SomeClass> theVector;

Этот объект выходит из объема, когда стековый фрейм исчезает (обычно, когда Вы возвращаетесь из функции, которая создала объект.

Создание объектов на "куче" позволяет им переживать функцию, которая создала их, и Вы делаете это путем выполнения:

vector<SomeClass> *theVectorPtr = new vector<SomeClass>();

Можно затем передать theVectorPtr указатель назад на вызывающую сторону функции (или хранилище это глобально, независимо от того, что Вы хотите).

Для избавлений от объекта на "куче" Вы явно удаляете его:

delete theVectorPtr;

где-нибудь в Вашем коде.

Удаление объекта на "куче" заканчивает объем того объекта, тот же способ возвратиться из функции заканчивает объем переменных, созданных на стеке.

8
ответ дан 2 December 2019 в 04:09
поделиться

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

2
ответ дан 2 December 2019 в 04:09
поделиться

Если объект (а не значение) определяется как членская переменная класса, то ее устройство хранения данных всегда связывается с экземпляром объекта того класса.

Поэтому, если содержание объекта будет выделено на стеке, то тот объект и поле умрут, когда стек развернет.

Если содержание объекта будет выделено на "куче", то объект поля умрет, когда все, содержащее объект, умрет с, удаляют.

Вы будете только подавать заявку, удаляют к полю, если это - указатель, начиная со все, что снабжено содержанием объекта, адрес некоторой другой области памяти, и Вы удаляете материалы в той области.

3
ответ дан 2 December 2019 в 04:09
поделиться

Уничтожать все объекты содержало в векторе, Вы сделали бы следующее:

theVector.resize(0);

Это произойдет автоматически, когда вектор выйдет из объема.

2
ответ дан 2 December 2019 в 04:09
поделиться

Это вызвано тем, что theVector не является указателем, который является что delete' expects. "Expected pointer" means the operand ofудалите', должен быть указатель.

Сравните это с

int theInt;
delete theInt;

Это, конечно, генерирует ошибку, подобную тому, что Вы получили.

1
ответ дан 2 December 2019 в 04:09
поделиться

C++ дает Вам гибкость для создания объекта в стеке и "куче". То, когда объект создается в "куче" через новый оператор как показано ниже его, возвращает указатель на объект в "куче".

ClassA * pobj_class = new ClassA();

Для объекта, созданного в стеке, конструктор возвращает объект, а не указатель как показано ниже.

ClassA obj_class();

и стек возражает автоматически уничтоженный, когда переменная (obj_class) выходит из объема, но объекта, созданного на жизнях "кучи" навсегда. Таким образом для уничтожения C++ объекта "кучи" дает Вам оператор delete, который берет указатель в качестве аргумента и уничтожает объект, на который указывает указатель.

1
ответ дан 2 December 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: