2010-06-22 2 views
4

"this"의 사용법과 관련된 질문이 있습니다.이 포인터의 사용

두 개의 클래스가 있다고 가정하십시오. A & B; 그들의 대략적인 개요는 다음과 같습니다 :

class A 
{ 
public: 
    ... 
    void AddB(B* b) 
    { 
     // inserts B into the vector v 
    } 

private: 
    std::vector<B*> v; 
}; 

class B 
{ 
public: 
    ... 

    void foo(void) 
    { 
     ... 

     // Adds itself to the queue held in A 
     a.AddB(this); 
    } 
}; 

이런 식으로 일반적으로 나쁜 습관을 사용하고 있습니까?

도움 주셔서 감사합니다.

답변

9

아니요, 소유권과 삭제에주의하는 한 아무 문제가 없습니다.

+1

소유권 의미가 순환을 포함하지 않고 또한 중요하지 않은 경우와 같이 'shared_ptr'또는 이와 유사한 것을 사용하도록 제안 할 수 있습니다. – Omnifarious

+1

동의. 평생 관리는 까다로운 부분입니다. –

+1

'this'에'shared_ptr'을 사용하는 것은 쉬운 일이 아닙니다. –

2

부스트를 도입 할 수 있다면 올바른 순서로 메모리를 수동으로 해제 할 필요가 없기 때문에 직접 포인터 대신 boost::shared_ptr을 사용하는 것이 좋습니다. 그리고 이미 해제 된 메모리를 가리키는 포인터가있을 가능성을 제거합니다.

this 대신 shared_from_this()을 사용할 수 있습니다. 자신의 타입에 대한 직접 포인터 대신에 공유 포인터를 생성합니다. 귀하의 유형 B는 enable_shared_from_this에서 파생됩니다.

유형 A은 직접 포인터 대신 boost::shared_ptr<B>의 벡터를 보유합니다.

Here's an example.