는 왜 이런 식으로 복사 생성자를 구현할 수 없습니다, 제대로 작성 일반적으로 배열)복사 생성자 내에 동적으로 할당 된 클래스의 복사 생성자를 호출합니까?</p>이 <pre><code>MyClass::MyClass(const MyClass &other) { this->value = new Value(*(other.value)); } </code></pre> <p>내가 보는 대부분의 예제,이 작업을 수행 : (그들은이기 때문에 생성자, 소멸자, 대입 연산자를 가정
MyClass::MyClass(const MyClass &other)
{
Value *temp = new Value;
*temp = *(other.value);
this->value = temp;
}
그러나 첫 번째 예에서 다루는 '새'가 발생하는 경우, 영향을받지 않습니다,과 가치의 복사 생성자가 발생하는 경우, 할당 된 메모리를 '새로운'해제하지 않습니다 '기타'가 예외를 전파하기 전에?
이것은 미니 스마트 포인터 자체를위한 것이기 때문에 특별히 std :: unique_ptr 및 다른 스마트 포인터를 사용하지 않아야합니다.
왜'동적으로 처음에 할당 된 값 '된다
std::unique_ptr
원하는 의미를 가지고 있으며,make_unique
도우미가 아주 쉽게 그것을 만드는 것 같습니다? 높은 가치를 지니고 값 의미를 부여하려고 시도하고 잘못 했습니까? – sehe값은 다른 클래스에 대한 포인터입니다. 아마도 'Value'라는 이름이 잘못된 단어 였을 것입니다. 더 일반적인 'Data'또는 'OtherClass'를 사용해야했습니다. 그리고 내가 "잘못하고있는 것"이라면, 나는 그것이 올바른지 아닌지를 알지 못하기 때문에 내가 질문을하는 이유입니다. –
그래서 왜 포인터입니까? 'MyClass'를 복사하는 것이'value'를 복사하는 것을 의미한다면, 그것은 단순히 값 집계입니다. – sehe