내가 할 수 있는 방법을 아는 사람, 플랫폼에 C++ 코드를 작성하는 것을 에서 객체를 힙에서의? 즉,, 이렇게 할 수 없게 하려면 클래스에 대한 " Foo" 싶습니다.
Foo *ptr = new Foo;
유일한 이 작업을 수행할 수 있게 해준다.
Foo myfooObject;
누구 뭐 좋은 방법이 없을까요?
건배,
[# 39 의 Nick& 오토메이티드] (https://stackoverflow.com/questions/10985/how-to-prevent-an-object-being-created-on-the-heap # 11003) 은 불완전한 상태로 할 때 좋은 출발점이 실제로 오버로드할:
private:
void* operator new(size_t); // standard new
void* operator new(size_t, void*); // placement new
void* operator new[](size_t); // array new
void* operator new[](size_t, void*); // placement array new
(좋은 코딩 연습 제시할 것이라고 할 수도 있습니다 오버로드할 삭제 및 삭제입니다 [] 연산자 - 꼭 이래야겠어요, 그러나 they& # 39, re not going , t 정말 필요한 isn& afaq # 39 라고도 했다.)
[파울두] (https://stackoverflow.com/questions/10985/how-to-prevent-an-object-being-created-on-the-heap # 11018) 도 있지만, 이 t survivetm 묶어 수정하십시오 doesn& # 39 에서 유일한 Foo 않니다 survivetm Foo. 이를 방지하기 위해 일부 템플리트를 할 수 있지만, 면역력을 지닌 메타 프로그래밍 매직 " 이글거리 users" 않을 것이라고 말했다. 그리하여 가치가 합병증 가능성이 거의 없다. 설명서를 제대로 사용할 수 있도록 어떻게 하는지, 사용되는 코드 리뷰 ~ 100% 밖에 없다.
Foo 의 새로운 저회가 전용으로 오버로드할 수 있습니다. 이는 컴파일러를 신음 소리 한다는 것을 의미하는 것이다. # 39 에서 Foo 의 인스턴스를 만드는 경우를 제외하고, re you& 힙에서의 Foo. 이 경우 단순히 Foo& # 39 을 잡을 수 없는 새로운 방법을 쓸 수 있습니다 다음 링커 신음 소리 정의되지 않은 심볼에는 대한 것이다.
class Foo {
private:
void* operator new(size_t size);
};
PS, 예, 회피 그러니까말이야 쉽게 확인할 수 있습니다. # 39 이라는 it& i&, m, s # 39 이 나쁜 아이디어 진짜 안 것 같아요 - - 난 그냥 하고 질문! -)
Stack 객체인지 경우 그 안에 있는 & # 39 구성자를 어설션 수 있는 가치를 this& # 39;; 항상 가까운 스택할 포인터입니다. # 39 의 there& 될 수 있는 좋은 기회를 객체에는 stack 이 경우.
내가 믿는 것은 그들의 모든 플랫폼에 같은 방향으로 스택 구현하십시오 단일 앱 테스트 할 수 있도록 할 때 전혀 확인할 방법이 스택할 증가하고 있습니다. 아니면 일부 잃어버린:
FooClass::FooClass() {
char dummy;
ptrdiff_t displacement = &dummy - reinterpret_cast<char*>(this);
if (displacement > 10000 || displacement < -10000) {
throw "Not on the stack - maybe..";
}
}
@ [닉] (# 11003)
회피 또는 취합합니다 파생시킵니다 Foo 의 클래스를 만들어 될 수 있습니다. 내 생각엔 내가 제안하세요 (아니지만 강력한) 및 통합 클래스뿐만 파생됨 여전히 일하고 있습니다.
E. g:
struct MyStruct {
Foo m_foo;
};
MyStruct* p = new MyStruct();