我很困惑。
让我们说,我有两个文件: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类中删除它。
答案 0 :(得分:1)
只要每个已分配的指针也被删除(并且只删除一次),那么哪个类做它并不重要。您的代码中没有内存泄漏。
为了使设计更容易理解,并使其更易于维护,最好在与创建相同的类中进行删除。这样,如果您更改分配指针的方式,则不必修改所有调用者,只需在同一个类中更新相应的删除代码。