我有內存問題。Objective-C++內存問題
我有一個C++庫(來自Eyescale的均衡器),他們使用Traversal Visitor Pattern來允許您爲他們的類添加新的功能。
我終於弄清楚它是如何工作的,而且我有一個Visitor,只是 返回其中一個對象的屬性。 (因爲我不知道他們是如何分配的 )。
等等。
我的小代碼做到這一點:
VisitorResult AGLContextVisitor::visit(Channel* channel)
{
// Search through Nodes, Pipes until we get to the right window.
// Add some code to make sure we find the right one?
// Not executing the following code as C++ in gdb?
eq::Window* w = channel->getWindow();
OSWindow* osw = w->getOSWindow();
AGLWindow* aw = (AGLWindow *)osw;
AGLContext agl_ctx = aw->getAGLContext();
this->setContext(agl_ctx);
return TRAVERSE_PRUNE;
}
所以這裏的問題。
eq::Window* w = channel->getWindow();
(gdb) print w
0x0
,但如果我這樣做:
(gdb) set objc-non-blocking-mode off
(gdb) print w=channel->getWindow()
0x300effb9
//一個誠實的存儲位置,並設置W用作XCode中的調試器窗口 驗證。
它爲osw做同樣的事情。
我不明白。爲什麼會在(gdb)中有效,但不在代碼中?
該文件完全是一個cpp文件,但它似乎運行在objC++, ,因爲我需要關閉阻止。
幫助!?我覺得我在這裏錯過了一些內存管理基本的東西, 用C++或Obj-C。
[編輯]
通道 - > getWindow()應該做到這一點:
/** @return the parent window. @version 1.0 */
Window* getWindow() { return _window; }
如果我從C++運行該代碼還執行精 - 唯一的應用程序。
[編輯]
不......我試圖創建一個簡單的獨立的程序,因爲我累了運行它作爲一個插件。凌亂調試。
不,也不會在C++程序中運行。所以我對我做錯了什麼事情感到不知所措。
感謝,
- 斯蒂芬·富拉尼
你嘗試使用的dynamic_cast(W> getWindow()); ? –
channel-> getWindow()應該返回: eq :: Window * getWindow(){return _window; } 如果我編寫僅用於C++的應用程序,代碼也可以工作。 –
「如果我從一個僅用於C++的應用程序運行它,代碼也可以正常運行。」 - 你如何在objc案例中創建涉及的C++對象?即有什麼不同嗎? – ergosys