다음 질문에 대한 답을 제시합니다.
나는 클래스 매트릭스동적으로 할당 된 객체에 대한 참조 반환
class Matrix{
private:
int *array;
int x;
int y;
public:
//some other things..
Matrix& operator+(Matrix& add);
Matrix& operator=(Matrix& matr);
}
내가 연산자 + 개체를가 매트릭스 할당됩니다 완전히 새로운 객체, 매트릭스에없는 매트릭스를 참조하거나 포인터를 반환 할 수 있습니다. 연산자 =는 값을 비트 단위로 복사합니다.
는 (나는 Matrix 클래스의 구현이 좋지 않은 것을 알고 있지만 나는 내 문제를 설명하기 위해 다음과 같이 그것을 확인)
지금 문제가
먼저 내가를 만들려고 + 연산자의 구현 이
Matrix sum;
//do what i have to do and then
return sum;
같은 오버로드 된 함수 객체 그러나 이것은 물론 파괴하는 오브젝트의 합과 매트릭스의 소멸자 것이다 물론
같은 문제를 제공합니다 6,delete [] array;
대안으로 이제
Matrix *sum;
sum = new Matrix;
sum->array = new int[//size that i need];
//do what i have to do
return *sum;
를 생성하는 메인
C=A+B;
(A, B, C는 매트릭스 객체)
A + B가 새롭게 생성 반환 힙에있는 객체에 대한 참조. 이 개체는 C에 할당되고 비트 단위로 복사본이 생성됩니다. C에는 올바른 x 값, 올바른 y 값이 있고 C-> 배열은 오버로드 된 연산자에서 할당 된 int 배열을 가리 킵니다 +
마지막이의 할당은 이후 난 메모리가 될 것이다 누출 미칠 은 (는 sizeof (매트릭스)) 라인
sum = new Matrix;
에서 연산자 + 함수에 할당 된 바이트 그래서 답변을 원하는 내가 어떻게 나타낸다 두 번째 경우의 메모리 누수를 피할 수 있습니다.
구현이 좋지 않다고 되풀이하지만 내가 가진 문제를 보여 주기만했습니다. 또한 내가 메인에 매트릭스에 대한 포인터를 가지고 모든 매트릭스 함수는 매트릭스 포인터를 반환 할 수 있습니다. 이것은 많은 문제를 해결할 수 있지만이 특정 경우에 대한 해결책을 원합니다.
'연산자 +'새로운 객체가 아니라 참조를 반환해야합니다. – juanchopanza