>

따라서 다음과 같은 수업이 있습니다 :

class foo{
public:
  unique_ptr<someClass> pt;
Foo(){}
//Copy constructor
Foo(Foo& f){
  someClass * copy = f.pt.get();
  pt=unique_ptr<someClass>(copy);
}
};

위 코드는 의도 한대로 작동하기 때문에 copy 생성자는 현재 클래스가 주어진 클래스의 정확한 사본을 갖도록합니다. 그러나 그것은 또한 메모리 액세스 위반을 제공합니다. 나는 valgrind에서 디버깅을 시도했지만 unique_ptr 클래스의 기본 삭제와 관련이 있다고 말합니다. 그러나 내 코드에서 언제든지 delete를 호출하지 않습니다.

이러한 메모리 액세스 위반을 제거 할 수있는 방법이 있는지 또 다른 단계가 없는지 궁금합니다.


  • 답변 # 1

    심층 복사의 경우 다음과 같이 사본 생성자를 수정해야합니다.

    Foo(Foo& f) : pt( new someClass( *f.pt.get() ) ) {}
    
    

    someClass 에 대한 복사 생성자를 정의해야합니다.  아직 정의되지 않은 경우에도 마찬가지입니다.

  • 답변 # 2

    이 문서는 딥 카피가 아니며, 얕게 복사 된 것입니다. 스마트 포인터에서 포인터를 가져 와서 두 번째로 넣으십시오.

    실패합니다. 먼저 객체를 복제해야합니다.

관련 자료

  • 이전 javascript - CSS 거대한 그리드 문제
  • 다음 javascript - 프롬프트를 통해 기능 검증