일반적으로 가능한 경우 포인터를 사용하는 것이 좋습니다.하지만 참조 또는 다른 방법으로 개체 개체 (값 생각)를 사용하는 것이 좋습니다.
우선 gVector3
이 표준 컨테이너의 요구 사항을 충족하는지, 즉 유형 gVector3
이 복사 및 할당 가능한지 알아야합니다. gVector3
도 기본 구성 가능하면 유용합니다 (아래의 UPDATE 참고 참조). 는 않습니다 가정하면, 다음 std::vector
std::vector<gVector3> points;
points.push_back(gVector(1, 2, 3)); // std::vector will make a copy of passed object
에 직접 gVector3
의 저장소 개체를 두 가지 선택 또는 수동으로 gVector3
객체의 생성 (및 파괴)를 관리 할 수 있습니다.
std :: vector points; points.push_back (새 gVector3 (1, 2, 3)); // ...
points
어레이가 더 이상 필요하지 않은 경우 모든 요소를 말하고 그에 대해 delete
연산자를 호출해야합니다.
gVector3
을 개체로 조작 할 수있는 경우 (값 또는 값 개체로 생각할 수 있음) 복사 생성자 및 할당 연산자의 가용성 덕분에 (위 조건을 참조하십시오) 다음 작업
gVector3 v1(1, 2, 3);
gVector3 v2;
v2 = v1; // assignment
gVector3 v3(v2); // copy construction
또는 당신이 원하는 또는 new 연산자를 사용 동적 저장에 gVector3
의 객체를 할당해야 할 수도 있습니다 가능합니다. 의미, 당신은 원하거나 자신의 개체의 수명을 관리해야 할 수도 있습니다. 그런데
은 또한
When should I use references, and when should I use pointers?
UPDATE 궁금 수 있습니다 : 여기 기본 constructibility에 노트에 설명이다. Neil이 초기에는 불분명하다고 지적하여 주신 데 대해 감사드립니다. Neil이 올바르게 알아 차렸으므로 C++ 표준에서는 필요하지 않지만이 기능은 중요하고 유용하기 때문에이 기능을 지적했습니다.
#include <vector>
struct T
{
int i;
T(int i) : i(i) {}
};
int main()
{
// Request vector of 10 elements
std::vector<T> v(10); // Compilation error about missing T::T() function/ctor
}
메모리 복사가 가장 큰 영향은 다음과 같습니다 유형
T
가 작도 기본되지 않은 경우, C++ 표준에서 요구하지 않는 것, 그 다음 사용자는 내가 아래에 설명하려고 잠재적 인 문제를 알고 있어야합니다. 당신이 3 개의 ints에 대해서 이야기한다면 무시할 만하다. – pestilence669@ mloskot - 앨리스가 네 가지 질문 만하고 다른 세 가지 대답을 수락 한 것을 보았을 것입니다. 그래서 그녀는 SO가 어떻게 작동하는지 분명히 알고 있으며 아마 그녀의 질문에 가장 잘 대답하는 답을 평가할 것입니다. – ChrisF
@Neil & @ChrisF - 어떤 요구 사항이있는 것은 아닙니다. 1 ~ 2 시간 이상 기다리는 것이 옳습니다. 앨리스에게 감사하십시오. – mloskot