gpt4 book ai didi

c++ - Objective-C++内存问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:27:59 25 4
gpt4 key购买 nike

我有内存问题。

我有一个 C++ 库(来自 Eyescale 的 Equalizer),他们使用 Traversal访问者模式允许您向他们的类添加新功能。

我终于弄明白了它是如何工作的,而且我有一个访客从其中一个对象返回属性。 (因为我不知道如何他们被分配)。

所以。

我的小代码是这样做的:

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。

[编辑]

channel->getWindow() 应该这样做:

/** @return the parent window. @version 1.0 */
Window* getWindow() { return _window; }

如果我从纯 C++ 应用程序运行代码,它也能正常执行。

[编辑]

不...我尝试创建一个简单的独立程序,因为我厌倦了将它作为插件运行。调试起来很麻烦。

不,它也不在 C++ 程序中运行。所以我真的不知道自己做错了什么。

谢谢,

--斯蒂芬弗拉尼

最佳答案

我想我应该回答并结束这个问题。

我使用的方法是完全线程不安全的。我正在跨线程、Carbon/Cocoa、C++/ObjC 调用。

不用说,永远不要那样做!我学到了很多东西。

-斯蒂芬

关于c++ - Objective-C++内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2200207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com