포인터에 관한 사소한 문제가 발생했습니다. 나는 한 줄에서이 작업을 할 수있는 빠르고 쉬운 방법이 싶었로 : 난 그냥 빨리 포인터의 모든 유형을 허용하는 템플릿 방법 간단한 헤더 파일을 설정포인터를 삭제하고 재설정하는 C++ 템플릿 함수
...
delete pointer;
pointer = 0;
...
합니다.
#ifndef P_DELETE_H
#define P_DELETE_H
template <typename T>
void pDelete(T* pointer) {
if (pointer) {
delete pointer;
pointer = 0;
}
}
#endif
그러나 결과는 삭제 된 개체 및 포인터 재설정에 대한 내 기대치를 충족시키지 못합니다. 대신 개체 만 삭제 된 것으로 보였지만 0으로 설정하면 효과가 없습니다 (필요한 경우). 누군가가 나를 위로 가볍게하고이 행동을 설명 할 수 있다면, 나는 그만큼 기뻐할 것입니다!
UPDATE : 대답 설명으로
, 표준 : : unique_ptr 및 표준을 사용하여 :: shared_ptr의이 포인터를 무효로보다 갈 수있는 안전한 방법입니다.
하지만 당신은 정말 요청과 같은 길을 갈해야하는 경우, 다음 코드는 트릭을 할 것입니다 :
template <typename T>
inline void pDelete(T*& pointer) {
if (pointer) {
delete pointer;
pointer = 0;
}
}
그러나이 제대로 삭제하고 포인터를 무효화에도 불구하고, 사용하기 일반적으로 안전하지 않은 모든 경우에 (빠른 테스트 결과).
유익한 답변을 보내 주신 모든 분들께 감사드립니다.
함수 인수는 함수 범위에 대해 로컬입니다. 여기에는 포인터가 포함됩니다. 포인터 참조 또는 포인터 포인터를 사용하여 함수 외부의 값에 영향을 주어야합니다. (또는 원시 포인터 사용을 중단하십시오.)이 모든 것을 필요로하지 않을 것입니다. – Biffen
참조 매개 변수가 필요합니다 :'void pDelete (T * & pointer)' –
* 참고 *와 인자 전달 방법에 대해 알고 있습니다 * 참조로 *? –