c ++ new和删除两个文件中的指针

时间:2016-01-26 22:43:19

标签: c++ pointers memory memory-leaks

我很困惑。

让我们说,我有两个文件:file1和file2,其中file1有A类,file2有B类

file1.h:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({
        'value':np.random.random(5),
        'label':['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
        'color':['g', 'b', 'k', 'y', 'm']})

fig, ax = plt.subplots()

# Plot each bar separately and give it a label.
for index, row in df.iterrows():
    ax.bar([index], [row['value']], color=row['color'], label=row['label'],
           alpha=0.5, align='center')

ax.legend(loc='best', frameon=False)

# More reasonable limits for a vertical bar plot...
ax.margins(0.05)
ax.set_ylim(bottom=0)

# Styling similar to your example...
ax.patch.set_facecolor('0.9')
ax.grid(color='white', linestyle='-')
ax.set(axisbelow=True, xticklabels=[])

plt.show()

file2.h:

Class B;
Class A
{
   public:
   vector<B *> myvec1;
   vector<B *> myvec2;
   void useBptr();
   ~A();
};

file2.ccp

#include "A.h"
Class B 
{

    void createPointer1();
    B * createPointer2();
    void wraperCreatePointer2();
    void dummyUse();
    ~B();
}

file1.cpp

void B::createPointer1(vector<B*> & myvec1)
{
    for(int i = 0; i < 5; i++)
    {
        B * myptr = new B();
        myvec1.push_back(myptr);
    }
}

void B::wraperCreatePointer2(vector<B*> & myvec2)
{
     for(int i=0; i<5; i++)
     {
         myvec2.push_back(createPointer2());
     }
}

问题是:我的删除指针方式是否正确?它会导致任何内存泄漏吗?删除像上面代码一样创建的指针的正确方法是什么?

我有这个问题的原因是我想如果我在B类中创建(新指针),那么我需要在B类中删除它。

1 个答案:

答案 0 :(得分:1)

只要每个已分配的指针也被删除(并且只删除一次),那么哪个类做它并不重要。您的代码中没有内存泄漏。

为了使设计更容易理解,并使其更易于维护,最好在与创建相同的类中进行删除。这样,如果您更改分配指针的方式,则不必修改所有调用者,只需在同一个类中更新相应的删除代码。