重新建立通过引用发送的变量

时间:2015-12-28 08:20:18

标签: c++ reference rebuild

这是我的代码

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); (指针与否)。

2 个答案:

答案 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);的值,您不想删除或创建任何动态内容。