это мой код
void SMatrix::pow(int power, SMatrix & result)
{
if (this->rowSize != this->colSize || this->rowSize != result.rowSize || this->colSize != result.colSize || power <= 0)
{
delete & result;
result = new SMatrix (result.rowSize, result.colSize);
}
}
Я пытаюсь удалить этот результат в этом случае, и отправить его как новый SMatrix
, Как мне это сделать? (reuslt = newM
….. спроси меня SMatrix *
, но это не работает с &).
В основном я могу построить это так:
SMatrix * s = новый SMatrix (4, 4);
или же
SMatrix s (4, 4);
(указатель или нет).
Этот код просто «делает это неправильно».
Если у вас есть ссылочный аргумент, то подразумевается, что владение любым указателем на него принадлежит вызывающей стороне.
void SMatrix::pow(int power, SMatrix & result)
{
if (this->rowSize != this->colSize || this->rowSize != result.rowSize || this->colSize != result.colSize || power <= 0)
{
delete & result;
result = new SMatrix (result.rowSize, result.colSize);
}
}
Если твой SMatrix
не имеет надлежащего operator=
тогда у тебя должен быть один. Другими словами, правильная вещь должна произойти, если вы делаете:
if (rowSize != colSize || rowSize != result.rowSize || colSize != result.colSize || power <= 0)
{
result = SMatrix (result.rowSize, result.colSize);
}
(Обратите внимание, что я удалил оба delete
линия и new
оператор)
Если по какой-то причине это не будет работать правильно, вам нужно это исправить, а не полагаться на то, как были распределены оригинальные данные.
delete & result;
result = new SMatrix (result.rowSize, result.colSize);
Ты не можешь delete
объект, а затем вызвать operator=
в теме. Вы делаете эквивалент этого:
std::string* j = new std::string ("hello");
delete j;
*j = "goodbye"; // Oops, there's no string whose value we can set
Я думаю, что вы, вероятно, просто хотите result = SMatrix (result.rowSize, result.colSize);
, Вы хотите изменить значение result
Вы не хотите удалять или создавать что-либо динамическое.