我要安排這樣的事情,對於一個類Foo,這個工程:如何定義只能通過新實例化的類(即不在堆棧上)?
Foo *f = new Foo()
但這並不(最好是編譯時錯誤):
Foo f;
可以這樣做?
具體的原因是Foo實際上是一個跟蹤類,使另一個堆分配對象出現在腳本環境中。 Foo的內部部件保持從腳本引用到C++對象的映射。追蹤被攝體會像這樣使用:
Thing *t = new Thing();
(new FooThing(t))->PushToScriptStack();
如果跟蹤對象是在棧上然後將鼠標指針變爲範圍的結束無效的,我留下了我的跟蹤數據懸擺指針。
我有這一切運作良好,我只是尋找一點額外的保護。
,當你使用它的另一個對象裏面是什麼。現在只能用指針表示。即使這個對象在堆上。 – 2011-03-22 01:40:58
好點。幸運的是,這不是我需要在這種情況下。 – 2011-03-22 01:43:46
@羅伯特諾里斯:我寧願用Foo :: destroy(f);以確保對象不會自行刪除(因爲這可能會導致問題)。 – 2011-03-22 01:48:10