title: C++ allocating dynamic memory in one function and clearing another function
body: <p>I would like experts review on the following dynamic memory allocation process and suggest whether there are any memory leaks. Following code is not real code in use, but trying understand concept of memory allocations and de-allocation in different ways.</p>
  
  <pre><code>class ObjMapData
  {
  private:
  int* itsMapData;
  ........
  public:
  ObjMapData();
  ~ObjMapData(){if(itsMapData!= NULL) delete[] itsMapData;}
  ClearMemory() {if(itsMapData!= NULL) {delete[] itsMapData; itsMapData= NULL}}
  .......
  void SetMapData(int* ptrData) { itsMapData = ptrData;} // or should I use int*&amp;ptrData??
  int* GetMapData() const { return itsMapData;}
  }
  </code></pre>
  
  <p>Now can I do the following without any memory leaks?</p>
  
  <pre><code>bool Function1(ObjMapData&amp; objMyMap)
  {
  //populate the ptrData with some data values using many different ways
  int* ptrData = new int[1000]; // usually a variable from binary file header
  
  ......................
  objMyMap.SetMapData(ptrData);
  //don't want to delete the memory yet
  return true;
  }
  
  bool Function2(ObjMapData&amp; objMyMap)
  {
  int* ptrData = objMyMap.GetMapData();
  //do some work such as writing updated data into a binary file
  }
  
  bool Function3(ObjMapData&amp; objMyMap)
  {
  //populate the data
  bool bStatus = Function1(objMyMap);
  
  int* ptrData = objMyMap.GetMapData();
  //update the map data using ptrData variable
  ..........
  bStatus = Function2(objMyMap); // write data to a binary file
  objMyMap.ClearMemory(); // not real code  in use, but for understanding the concept
  bStatus = Function1(objMyMap); // re-allocate memory
  ptrData = objMyMap.GetMapData();
  //update the map data using ptrData variable
  objMyMap.SetMapData(ptrData); // Do I need to set again or member pointer get updated automatically?
  return true
  }
  int main()
  {
  ObjMapData objMyMap;
  bool bStatus = Function3(objMyMap);
  //default destructor of objMyMap can take care of the allocated memory cleanup
  return 0;
  }
  </code></pre>
  
  <p>Thank you for your time to confirm the dynamic memory allocation..</p>