我與新的運營商已經取得了私人的某一等級的工作,這樣就得到一個實例的唯一方法是寫類實例的大小
Foo foo = Foo()
寫作
Foo* foo = new Foo()
不起作用。
但是,因爲我真的想它的指針,我模擬與以下:
Foo* foo = (Foo*)malloc(sizeof(Foo));
*foo = Foo();
,這樣可以測試指針是否爲空知道是否已經被初始化。
它看起來像它的工作原理,從實證檢驗,但有可能是沒有足夠的空間已被分配的malloc?或者別的東西變得有趣?
---編輯---
A未提及的背景下,因爲我本來就不是肯定他們爲什麼新的運營商被禁用。這個類是約束編程庫(gecode)的一部分,我認爲它可能被禁用,以強制指定模型的文檔化方式。
我不知道具體的數據類型成語,這看起來更合理。
即指定一個標準模型---在一切被指定爲在太空的派生類CDTs時分配方案可能被罰款---但對我來說,這些實例分別由特定的類創建,然後通過通過引用表示模型的類的構造函數。
關於原因,我沒有使用
Foo f;
Foo *pf = &f;
它會像做情況1以下,它拋出一個「回頭參照本地變量」警告
int& f() { int a=5; return a; } // case 1
int& f() { int a=5; int* ap=&a; return *ap; }
int& f() { int* ap=(int*)malloc(sizeof(int)); *ap=5; return *ap; }
這警告在情況2中添加指針時消失,但我想這是因爲編譯器丟失了跟蹤。
所以,唯一的選擇就是情況下3(不提的是additionaly,ap
是將只有一次當f被稱爲初始化類的成員,將爲空否則,是返回的唯一功能這種方式,我相信ap
在這種情況下失去了它的意義,因爲compilier優化它(可能會發生?)
但我想這遠遠超出了原來的範圍現在的問題...
爲什麼你真的想要一個指針呢?難道你不能做像Foo foo = Foo(); Foo * fooPtr = &foo; – Hogan 2010-10-05 16:46:13
我可能是錯的,但這樣做對我來說似乎很奇怪。 'delete'也是私人的嗎?否則,你的代碼中會顯式地刪除'''',但不會''新建''。這很難追蹤。 – John 2010-10-05 16:48:17
爲什麼不用'&foo'來獲取對象的地址?你爲什麼要做'malloc'? – Naveen 2010-10-05 16:48:51