在成员函数中创建对象

时间:2016-12-27 02:08:20

标签: c++

标题定义为

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中的成员函数。在结束主函数之前,对象不会破坏。

我尝试了一些方法,但是当离开检查成员函数时,对象会被移除。有什么解决方案吗?

1 个答案:

答案 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的实例被销毁时,它所包含的对象也将被销毁。