我是来自C#背景的c ++程序员,在c ++中仍然存在一些关于内存管理的困惑
我有一个有三个功能的课程
1st返回指向局部变量的指针
2nd返回指向指针列表的指针
3rd返回指向指针列表列表的指针
考虑这段代码:
AugmentedActivePastConjugator.h
class AugmentedActivePastConjugator {
public:
AugmentedActivePastVerb* createVerb(AugmentedTrilateralRoot* root, int pronounIndex, int formulaNo);
vector<AugmentedActivePastVerb*>* createVerbList(AugmentedTrilateralRoot* root, int formulaNo);
vector<vector<AugmentedActivePastVerb*>*>* createAllVerbList(AugmentedTrilateralRoot* root) ;
};
AugmentedActivePastConjugator.cpp
AugmentedActivePastVerb* AugmentedActivePastConjugator::createVerb(AugmentedTrilateralRoot* root, int pronounIndex, int formulaNo) {
string lastDpa = PastConjugationDataContainer.getLastDpa(pronounIndex);
string connectedPronoun = PastConjugationDataContainer.getConnectedPronoun(pronounIndex);
AugmentedActivePastVerb verb (root,lastDpa,connectedPronoun,formulaNo);
return &verb ;
}
vector<AugmentedActivePastVerb*>* AugmentedActivePastConjugator::createVerbList(AugmentedTrilateralRoot* root, int formulaNo) {
vector<AugmentedPastVerb *> result;
for (int i = 0; i < 13; i++) {
AugmentedActivePastVerb* verb = createVerb(root, i, formulaNo);
result.push_back(verb);
}
return &result;
}
vector<vector<AugmentedActivePastVerb*>*>* AugmentedActivePastConjugator::createAllVerbList(AugmentedTrilateralRoot* root) {
vector<vector<AugmentedActivePastVerb*>*> result;
vector<AugmentationFormula*>::iterator begin = root->getAugmentationList().begin();
vector<AugmentationFormula*>::iterator end = root->getAugmentationList().end();
while (begin !=end) {
AugmentationFormula* formula = *begin;
vector<AugmentedActivePastVerb*>* formulaVerbList = createVerbList(root, formula->getFormulaNo());
result.push_back(formulaVerbList);
}
return &result;
}
如果我想创建此类返回的动词列表,例如
// general variable
list<AugmentedActivePastVerb *> verbslist;
AugmentedActivePastConjugator conjugator;
void createverbslist()
{
for (int i=0; i < 20; i++) {
AugmentedActivePastVerb* verbs = conjugator.createVerb(someroot, pIndex, fNo);
verbslist.push_back(verb)
}
}
使用 verbslist 后我该怎么办?我应该删除其中的所有指针还是自动释放它们
我读过一篇文章说:
不释放未动态分配的内存
所以如果我不应该释放它, verbslist
中的指针会发生什么答案 0 :(得分:2)
AugmentedActivePastVerb verb (root,lastDpa,connectedPronoun,formulaNo);
return &verb ;
永远不要这样做。 verb
在堆栈上分配,并在从堆栈中删除方法调用后立即销毁。瞧,您的应用程序指向一个不再代替的变量。