생성자가 new (즉, 생성자가 다른 것을 동적으로 할당해야 함)와 관련된 형식의 + 연산자를 재정 의하여하려하므로 소멸자가 delete . 어딘가에, 내가 같은 것을 사용할 수 있도록 싶습니다동적으로 할당 된 형식에 대한 C++의 오버로드 + 연산자
T c = a + b;
내 문제 것은 내가 분명히 + 기능 내부 타입 T의 객체를 만들 필요가있다. by-copy를 반환하기 위해 + 함수 구현 내부의 스택에 T의 임시 인스턴스를 할당하면이 인스턴스의 소멸자가 + 호출 종료로 호출되어 c에 대한 할당 전에 (또는 내가 믿기 때문에) 호출됩니다. 그래서 그건 선택이 아닙니다. 내 다른 옵션은 new
을 사용하고 반환 할 때 new가 반환 한 포인터를 역 참조하는 것으로 보입니다. 그러나이 방법의 문제점은 포인터에 액세스 할 수 없으므로 delete
을 호출 할 수있는 방법이 없을 것입니다.
그래서 내 질문은 ... 그것은 동적 할당과 관련된 유형의 연산자를 오버로드하는 것이 드문 일은 아닐 수 있습니다. 사람들은 어떻게 그런 상황을 일반적으로 처리합니까?
나는이 문제를 이해하지 못한다. 만약 당신의 타입'T'가 생성자에서'new'를 가지고 있고 소멸자에서'delete'를 가지고 있다면, 어떤 멤버는 무엇이 문제입니까? –
나는 T c = a + b라고 쓰고 싶다. 문제는 + 함수가 T 유형의 객체를 반환해야한다는 것입니다.이 객체는 어디에 만들어야합니까? + 함수의 스택에서는 작동하지 않습니다. 범위를 벗어날 때 delete가 호출됩니다. 즉, + 함수에서 반환 될 때 필요한 할당 전에 나타납니다. 새 키워드를 사용하고 돌아 왔을 때 역 참조해야합니까? 그렇다면 new에 의해 반환 된 포인터를 복구 할 수는 없으며 결코 삭제할 수 없기 때문에 메모리 누수가 발생합니다. – Gravity
Hmmm ... 복사 생성자가 copy로 값을 반환 할 때 자동으로 호출 되는가? 그런 일은 제가 일하려고하는 것을 만들기 위해 필요할 것입니다.이것은 C++의 설계자가 이런 종류의 문제를 해결하기 위해 구현 한 것입니까? (따라서 다른 게시물에 복사 생성자에 대한 언급이 있습니까?) – Gravity