管理未动态分配的内存



我是一名来自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 后我应该怎么做,我应该删除其中的所有指针还是会自动释放它们

我读过一篇文章,上面写着:

不释放未动态分配的内存

所以如果我不应该释放它,动词列表中的那些指针会发生什么

AugmentedActivePastVerb verb (root,lastDpa,connectedPronoun,formulaNo);
return &verb ;

永远不要这样做。 verb在堆栈上分配,并在从堆栈中删除方法调用后立即销毁。瞧,您的应用程序指向一个不再在其位置的变量。

最新更新