这是我的代码
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 *
,但它并不适用于&amp;)。
在主要我可以像这样构建它: SMatrix * s =新的SMatrix(4,4); 要么 SMatrix s(4,4); (指针与否)。
答案 0 :(得分:4)
这段代码只是&#34;做错了#34;。
如果你有一个引用参数,那么隐含的效果是指向它的任何指针的所有权都属于调用者。
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
行和#if __STDC_NO_ATOMICS__!=1
运算符)
如果由于某种原因,如果这不能正常工作,那么你需要解决这个问题,而不是依赖于如何分配原始数据。
答案 1 :(得分:2)
<button id="btn1" onclick="myFunc(200)"> 1 </button>
<button id="btn2" onclick="myFunc(400)"> 2 </button>
var val = 0
function myFunc(value) {
val = value;
console.log(value);
}
您无法 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);
的值,您不想删除或创建任何动态内容。