【发布时间】:2015-02-27 20:08:13
【问题描述】:
我对 boost shared_ptr 有一个奇怪的问题:
class A
{
A( )
: m_myObjectPtr( new MyObject( ) )
{
}
protected:
boost::shared_ptr<MyObject> m_myObjectPtr; // MyObject class is a simple class with a constructor and destructor
};
class B : A
{
B( )
{
}
void CleanMyObject( )
{
m_myObjectPtr.reset( );
}
};
class MyObject
{
MyObject( )
{
cout << "Constructed MyObject" << endl;
}
~MyObject( )
{
cout << "Destroyed MyObject" << endl;
}
};
我的问题是当我调用 B::CleanMyObject() 时从未调用 MyObject 的析构函数。 “Destroyed MyObject”永远不会被打印出来。
我在 iOS 上使用 https://github.com/danoli3/ofxiOSBoost/blob/master/scripts/build-libc%2B%2B.sh 构建的 arm64 构建 boost 1_57 看到了这一点
有什么想法吗?
【问题讨论】:
-
Class不是 C++ 中的关键字 -
共享指针是共享的。您是否(有意或无意地)将
A或B对象复制到任何地方?发布创建和删除对象的完整示例会有所帮助。 -
这段代码显然不是您尝试的代码。有几个问题甚至无法编译类。
-
这是一个复杂项目的虚构示例,我无法在此处获得确切的代码。但根据我的检查,MyObjectPtr 从未在 A 类和 B 类之外被引用。
-
@ssk 对于此类问题,最好提供SSCCE
标签: c++ ios boost shared-ptr arm64