类中的静态函数,如何处理内存?

时间:2013-04-12 02:15:22

标签: c++ function memory static static-functions

我想使用以下静态函数。该函数将依次计算输入,std :: cout结果。调用静态函数并从堆栈中取出后,是否会释放与此类关联的所有内存?这相当于在main的范围内创建此类的实例,还是仅在此函数调用期间存在?假设函数在main函数中被调用,如下所示。此外,进一步阅读链接将是伟大的。

typedef std::vector< std::vector<int> > matrix;    
    class LCS
        {
            public:
                static void getLCS(std::string,std::string);
            private:
                void compute_alignment();
                std::vector<std::string> f1,f2;
                matrix cost,link;
        };
int main(int argc, char* argv[])
{
    //check command line args
    if(argc != 3){std::cout<<"usage: ./exe file1.txt file2.txt";exit(1);}
    //compute
    LCS::getLCS(argv[1],argv[2]);
}

1 个答案:

答案 0 :(得分:1)

严格根据您的问题判断,如果在堆栈中声明它们(不是任何类型的裸new),则在完成该函数后,在getLCS内声明的所有变量将会死亡 。除此之外别无其他。调用静态函数也不会创建新的LCS类:类上的静态函数几乎就像自由函数一样,除了它们可以在它们上面放置访问修饰符以便在类中进行作用域。 Static data and methods operate independently of their classes unless you explicitly use and intermingle them in member functions

编辑:

请注意,所有C ++函数都是如此。当该函数/作用域死亡时,在堆栈上生成的对象和基元将死亡/超出范围。作为奖励乐趣,您甚至可以通过在某些代码周围任意使用一些大括号scope来创建{ /* ... */ }!但通常没有必要做那样的事情。

祝你好运!