2012-10-28 2 views
0

일을하는 이유는이 클래스를 사용할 때 스마트 포인터로 모든 개체를 강제 할 것입니다. 따라서 일부 코드를 저장할 수 있습니다클래스 Vector2 최종 : shared_ptr의 <Vector2> 올바른 여부는 (!) 업데이트

class Vector2 final : shared_ptr<Vector2> 
{ 
... 
inline shared_ptr<Vector2> getVector2(); //--> inline Vector2 getVector2(); 
... 
inline static float dot(const shared_ptr<Vector2> a, const shared_ptr<Vector2> b); //--> inline static float dot(const Vector2 a, Vector2 b); 
} 

올바른가요? 예인 경우 모범 사례입니까? 아니요, 가장 좋은 것은 무엇입니까?

============================================== ====================================

는 어쩌면 또 다른 예를 사용

class Sprite 
{ 
private: 
Vector2* pPosition; 
shared_ptr<Vector2> position; 

Image* pBackground; 
shared_ptr<Image> background; 
}; 

참조 횟수가 필요한 이유를 설명해 드리겠습니다. 위치 나 배경을 업데이트 할 때 새 값을 지정하기 전에 삭제 작업을 처리해야합니다. 이 하나

inline static shared_ptr<Vector2> add(const Vector2* a, const Vector2* b) 

에 대해이 또는 기능을 종료하기 전에 사용하지 않을 수도 있습니다 결과를 반환하는 방법을

. 그런 다음 사용하지 않으면 수동으로 삭제해야합니다.

코드 저장 수단 1. 수동으로 객체를 삭제할 필요가 없습니다. 2. shared_ptr인지 Vector2 *인지주의해야합니다. 하나의 유형으로 표준화하고 싶기 때문에

답변

3

나는 그것이 당신을 저장하는 방법을 이해하지 못합니다. 왜 벡터를 참조 횟수가 필요합니까? 이는 근본적으로 필요하지 않은 무언가에 정말로 비용이 많이 들고 코드의 의미를 복잡하게 만들고 독자를 WTF로 만듭니다.

질문은 vector2이어야합니다. 이되어야합니다.이 공유 포인터인지 또는 공유 포인터로 감싸 야하는지 여부가 아닙니다. 둘 중 하나를 할 이유가 없습니다.

3

나는 당신의 디자인이 꽤 끔찍하다고 생각합니다. 마치 자바 수명이나 다른 것을 가지고 싶다는 것입니다.

염두에두고 분리하여 설계해야합니다.

dot은 Vector2의 수명을 관리하는 데 신경 쓰지 말고 참조로 Vector2 객체를 가져 와서 std::shared_ptr으로 묶은 다음 사용하기 전에 참조를 해제하십시오. 같은 헛된에서

, 당신의 Vector2 객체는 수명이 관리 할 방법은 다음의 어떤 ​​개념이 없습니다.

관련 문제