C++ iOS,目标c代码中的共享ptr生命周期?

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对象的析构函数中: 我认为每次我用对象的析构函数弹出视图控制器时,都必须调用对象的析构函数。但当我只给这个变量分配另一个

我使用MonkSVG库,它使用
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++库中的内存问题。