이것은 아마도 매우 초보자 질문입니다. 내가 일하고 있어요 클래스는 내가 복사 생성자 나는 source.bins
을 복사해야동적으로 할당 된 포인터에 대한 std :: copy
MyClass(const MyClass& source)
을 구현하고 있습니다 때문에 다음과 같은 변수
int nbins;
double * bins; // = new double[nbins+i]
포함 (의가 MyClass에 전화하자). 을 algorithm
에서 사용하려고했지만, 찾은 모든 예는 double bins[] = ...
과 같은 정적 배열을 복사하거나 std::vector
과 같은 표준 데이터 구조를 복사하는 방법을 보여줍니다. std::copy
이 double * bins = new double[nbins+i]
과 같은 포인터에 사용되는 예는 찾을 수 없습니다. 그래서, 내 질문은 : 예
double * bins = new double[nbins+1]; //is this necessary?
std::copy(std::begin(source.bins), std::end(source.bins), std::begin(bins));
에 대한 같은 포인터에 std::copy
를 사용하는 법적 또는 차라리 의존해야 C memcpy
double * bins = new double[nbins+1]; //again, is this necessary?
memcpy(source.bins, bins, (nbins+1) /* *sizeof(double) ?*/);
그래서, 내 질문은 기본적으로 두 가지 :
1) std::end(bins)
은 bins (=new double[nbins+1])
의 끝 부분을 알고 있습니까?
2) 복사하기 전에 대상 메모리를 할당해야합니까? 또는 copy
(또는 memcpy
)이 처리합니까?
'std :: vector'을 대신 사용해도 좋습니다. –
milleniumbug
벡터를 사용할 수 있으면 좋겠지 만 :) 제가 작업하고있는 프레임 워크는 벡터를 허용하지 않습니다. 예, vector :: data()를 사용하면 엉망입니다. – Blackphoenix