의 내가 두 정점을 추가하는 방법으로 정점이라는 구조를 가지고 있다고 가정 해 봅시다 : 나는 두 개의 정점을 추가하고 vector<vertex*>
에 결과를 추가 할 또 다른 호출 함수에서힙의 벡터에 객체 값을 추가하는 것이 언제 안전합니까?
struct vertex {
float x, y, z;
// constructs the vertex with initial values
vertex(float ix, float iy, float iz);
// returns the value c = this + b
vertex operator+(vertex b);
};
vertex::vertex(float ix, float iy, float iz){
this->x = ix; this->y = iy; this->z = iz;
}
vertex vertex::operator+(vertex b){
vertex c;
c.x = this->x + b.x;
c.y = this->y + b.y;
c.z = this->z + b.z;
return c;
}
합니다. 반환 된 값을 사용하여 주어진 벡터에 추가하는 것이 안전한 경우는 언제입니까? 만약 그렇다면 어떻게 구현할 수 있습니까? 현재 함수가 종료되면 회수한다 자동 또는 임시 변수에 대한 포인터를 저장되기 때문에, 예를 들어
,
vector<vertex*> v;
vertex a(1, 2, 3);
vertex b(4, 5, 6);
v.push_back(&(a + b));
비트를 명확히하지만, 연산자 함수에서 포인터를 반환하지 않고이 작업을 수행하는 안전한 방법은 무엇입니까? 서로 다른 사업자를 함께 연결할 수 있기를 원합니다. 즉 a + b + c. – Asuah
pass-by-value 및 return-by-value 의미를 사용하는 경우에도이 작업을 계속 수행 할 수 있습니다. 그것은 안전 할 것이다. 꼭지점에 대한 포인터 벡터 벡터가 아닌 꼭지점 개체 벡터 만 수행하면됩니다. – Uri
스마트 포인터를 사용하는 것이 여기 또 다른 옵션입니다. –