템플릿에서 placment delete/new를 사용하여 클래스를 재설정하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/488874

  •  20-08-2019
  •  | 
  •  

문제

풀 관리자 템플릿 클래스가 있습니다. 클래스 객체가 풀 관리자에 다시 추가되면 초기 상태로 다시 재설정하고 싶습니다. 다음에 풀 관리자가 제공 할 때 배치 소멸자 및 위치 생성자를 호출하고 싶습니다. 나는 이것을 작동시키기 위해 여러 가지 방법을 시도했지만 그루터기가 있습니다. 다음은 내가 시도한 것의 예입니다.

template <class T>
void PoolClass<T>::ReleaseToPool(T *obj)
{
     obj->~T();   //call destructor

     obj->T::T(); //call constructor
     //also tried new (obj)T(); //but this doesn't seem to work either

     //then misc code to add a pointer to the object
     //to my list of available objects for re-use later
}

나는 다양한 구문을 시도했지만 아무도 작동하지 않는 것 같습니다. 코드 자체는 크로스 플랫폼이므로 GCC (MINGW 또는 Linux 또는 Mac에서)를 사용하여 컴파일해야하며 Windows의 경우 여전히 vs 2003을 사용하고 있습니다.

도움이 되었습니까?

해결책

어때요 :

template <class T>
void PoolClass<T>::ReleaseToPool(T *obj)
{
    obj->~T();                  //call destructor
    obj = new ((void *)obj)T(); //call constructor

    // add a pointer to the object to the list...
}

다른 팁

부스트에는 a가 있습니다 수영장 도서관. 자신의 글을 쓰는 대신 사용하는 것이 더 쉬울 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top