标题定义为
class MyClass_A;
typedef map<string, MyClass_A*> MyMap
typedef vector<MyClass_A*> MyList
class MyClass_A
{
// define some functions
}
class MyClass_B
{
public:
void check(){ //create MyClass_A pointer to store in myMap and myList }
private:
MyMap myMap;
MyList myList;
}
主要功能如
int main()
{
MyClass_B class_B;
class_B.check();
/*
do some works
*/
}
我想在check中定义MyClass_A对象,这是MyClass_B中的成员函数。在结束主函数之前,对象不会破坏。
我尝试了一些方法,但是当离开检查成员函数时,对象会被移除。有什么解决方案吗?
答案 0 :(得分:1)
不是存储原始指针,而是使用智能指针:
class MyClass_B
{
public:
void check(){
//create MyClass_A pointer to store in myMap and myList
Ptr_A obj = std::make_shared<MyClass_A>();
myMap["hello"] = obj;
myList.push_back(obj);
}
private:
typedef std::shared_ptr<MyClass_A> Ptr_A;
std::map<std::string, Ptr_A> myMap;
std::list<Ptr_A> myList;
}
现在自动管理MyClass_A
个实例的生命周期。当MyClass_B
的实例被销毁时,它所包含的对象也将被销毁。