나는 그때 호출 된 객체를 반환하는 하나의 팩토리 함수를 내보내는 모듈 (dll/so)을 가지고있다. 인터페이스 (순수 가상)를 사용하면 모듈의 사용자가 다른 객체를 만들 수 있습니다. 모든 객체 생성은 인터페이스를 통해 이루어 지므로 응용 프로그램 런타임이 아닌 내 모듈과 관련된 런타임을 사용하여 수행됩니다.Disallow/Redirect C++ delete?
할당이 모듈 내부에서 일어나므로 응용 프로그램이 내 모듈과 다른 런타임 인 gpf/segfault 시간을 가지므로 삭제도 필요합니다. 그래서 나는 스스로 삭제를 수행하는 "release"멤버를 가지고있다.
void foo::release(void)
{
delete this;
}
모든 것이 잘 작동하지만 모듈 사용자가 작동해야합니다.
내 질문은 :
- 그것은 바로 내 개체를 삭제 발행 사람을 중지 (또는 내 모듈 메모리 풀에서 삭제를 재) 할 수 있습니까?
- 백업 계획이 아니라면 내 개체에서이를 감지 할 수 있습니까? 그렇다면 좋은 행동을 강요하는 단정을 던질 수 있습니까?
예컨대 : 편집에
iFoo* foo = createFoo();
foo->release(); // Allowed and expected
delete foo; // Disallowed
"개인용 소멸자 만들기"옵션을 고려 했습니까? – dave
행동하지 않기로 선택한 사용자는 여러 가지 방법으로 당신을 깰 수 있습니다.인터페이스를 사용하기 쉽고 잘못 사용하기 어렵게 만들고 악의적 인 의도에 대해 너무 걱정하지 마십시오. –
아마 스마트 포인터를 반환하는 순서입니까? http://en.wikipedia.org/wiki/Smart_pointer – amdn