홈>
따라서 다음과 같은 수업이 있습니다 :
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
- 답변 # 2
이 문서는 딥 카피가 아니며, 얕게 복사 된 것입니다. 스마트 포인터에서 포인터를 가져 와서 두 번째로 넣으십시오.
실패합니다. 먼저 객체를 복제해야합니다.
관련 자료
- c++ - 메모리 액세스 위반
- ContentType에서 Django의 'content_object'필드에 액세스하려고합니다
- java - Spring Boot에서 두 데이터베이스에 액세스하려고 할 때 이름이 'entityManagerFactory'인 Bean 작성 오류
- c# - net core docker httpclient를 사용하여 코드에서 pfx 인증서에 액세스하는 방법은 무엇입니까? 인증서가 필요한 컨테이너에서 외부 API에 액세스하려고합니다
- c++ - 예외 발생 - 메서드 전면 호출시 읽기 액세스 위반
- sql - postGreSQL에서 고유 한 이메일 위반 예외를 어떻게 처리 할 수 있습니까?
- Android 모바일 메모리에서 pdf 파일을 읽으려고하는데 "load pdf error"가 표시됩니다
- C에서 런타임에 특정 메모리 주소에 어떻게 액세스 할 수 있습니까?
- java - 고유 인덱스 또는 기본 키 위반 - "primary key on publicxxx";sql 문
- c++ - 거대한 배열에서 액세스 위반?
- c - 어레이 이름에 무언가를 추가하고 메모리 위치에 액세스하려고하면 어떻게됩니까?
- c++ - 매트릭스에서 읽기 액세스 위반
- c# - 정적 오류가 발생하여 Access 데이터베이스에서 파일을 읽기위한 연결을 설정하려고합니다
- google chrome - javascript executor는 windowpropertyname에 액세스하려고 할 때 null을 제공합니다
- c - 값을 큐의 앞쪽으로 푸시 할 때 쓰기 액세스 위반 (@ 0xCDCDCDCD) (링크 된 목록)
- php - 구문 오류 또는 액세스 위반 - 1064 :pdo가 여러 쿼리 실행을 거부합니다 (create temporary table 포함)
- delphi - edbkerror - 디버그 프로세스 메모리에 액세스 할 수 없음 : readprocessmemory 또는 writeprocessmemory 요청의 일부만 완료되었습니다
- 잘못된 구성으로 인해 Visual Studio 2019에서 디버그 모델 용으로 컴파일 할 때 액세스 위반으로 인해 Boost Filesystem이 실패 할 수 있습니까?
- rust - 클로저는`self`에 대한 고유 한 액세스가 필요하지만 이미 차용되었습니다
- python 3.x - getobject 작업 - boto를 사용하여 s3 버킷의 파일을 읽으려고 할 때 액세스가 거부되었습니다
관련 질문
- c# to c++ : IntPtr.ToPointer, c++ code는 무엇입니까?
- c++ : 이 문제가 발생하는 이유 : new-declarator의 [Error] 표현식은 정수 또는 열거 유형을 가져야합니다.
- c++ : Node * &ptr= root->mRight로 선언 된 변수
- c++ : C ++ 템플릿 전문화, 포인터 또는 참조가 모호하지 않을 수있는 유형에 대한 메서드 호출
- c++ : void *를 다시 배열로 변환
- c++ : 중첩 컨테이너에 대한 사용자 지정 할당 자
- c++에서 new 연산자로 메모리를 초기화하는 방법은 무엇입니까?
- txt 파일에서 올바르게 읽고 포인터, c++로 구조체에 할당하는 방법
- c++ 문자열 할당 오류입니다. 구조체 포인터의 문자열 멤버에 값을 할당하는 방법은 무엇입니까?
- c++ : Windows에서는 리소스 모니터에서 높은 커밋 메모리를 보여주는 작은 바이트 누출도 왜 발생합니까?
심층 복사의 경우 다음과 같이 사본 생성자를 수정해야합니다.
someClass
에 대한 복사 생성자를 정의해야합니다. 아직 정의되지 않은 경우에도 마찬가지입니다.