C++ iOS,目标c代码中的共享ptr生命周期?
我使用MonkSVG库,它使用C++ iOS,目标c代码中的共享ptr生命周期?,c++,ios,objective-c,uiviewcontroller,push,C++,Ios,Objective C,Uiviewcontroller,Push,我使用MonkSVG库,它使用boost::shared_ptr类型(据我所知std::shared_ptr的工作方式也是如此) 据我所知,我不需要自己从中释放记忆 我创建了一个单独的UIViewController,其中的代码来自定义shared_ptr变量和push/pop此视图控制器的库示例。但似乎内存有问题,或者这个变量的工作方式和我想的不一样。问题出在共享\u ptr对象的析构函数中: 我认为每次我用对象的析构函数弹出视图控制器时,都必须调用对象的析构函数。但当我只给这个变量分配另一个
boost::shared_ptr
类型(据我所知std::shared_ptr
的工作方式也是如此)
据我所知,我不需要自己从中释放记忆
我创建了一个单独的UIViewController
,其中的代码来自定义shared_ptr变量和push/pop此视图控制器的库示例。但似乎内存有问题,或者这个变量的工作方式和我想的不一样。问题出在共享\u ptr
对象的析构函数中:
我认为每次我用对象的析构函数弹出视图控制器时,都必须调用对象的析构函数。但当我只给这个变量分配另一个实例时,它就被调用了。它看起来如下所示:
推送/弹出|共享| ptr |常用对象
推|-|-
pop |-|析构函数
推式|析构函数|-
pop |-|析构函数
等等
这是它的正常行为吗?弹出(我想你的意思是在UINavigationController
中),UIViewController
不一定会释放它(你可以覆盖它的dealloc
方法来检查)。只要您保持对它的强引用,UIViewController
实例将保持活动状态
但是,当您重新分配UIViewController
变量时,您会丢失对旧实例的强引用(如果您使用ARC),这会导致该实例被解除分配,然后会销毁所有共享的\u ptr
实例变量。弹出(我假设您的意思是在UINavigationController
中)UIViewController
不一定会解除分配它(您可以覆盖它的dealloc
方法来检查它)。只要您保持对它的强引用,UIViewController
实例将保持活动状态
但是,当您重新分配
UIViewController
变量时,您会丢失对旧实例的强引用(如果您使用ARC),这会导致它被解除分配,然后会销毁任何shared\u ptr
实例变量。您的boost::shared\u ptr是实例变量(ivar)吗您的UIViewController子类的名称?我在UIViewController
子类的文件中尝试将其作为静态变量(不在该类中),并在该类中尝试将其作为常规变量。结果相同或看起来相同。您的boost::shared_ptr是UIViewController子类的实例变量(ivar)吗?我在UIViewController
子类的文件中尝试了它作为静态变量(不在此类中),并在该类中尝试了它作为常规变量。结果相同或看起来相同。我的对象声明为shared\u ptr obj代码>是否可以为其分配任何空值来重置它?您有一个共享的ptr到什么?谢谢,重置工作非常完美。我没有找到它,因为我试图在shared_ptr中向对象类型添加一个同名的方法。在C++中,我是新手,但是我需要修复C++库中的内存问题。代码>是否可以为其分配任何空值来重置它?您有一个共享的ptr到什么?谢谢,重置工作非常完美。我没有找到它,因为我试图在shared_ptr中向对象类型添加一个同名的方法。我在C++中是新手,但是我需要修复C++库中的内存问题。