0

我想使用以下静态函数。该函数将依次计算输入和 std::cout 一个结果。在调用静态函数并从堆栈中取出后,与该类关联的所有内存是否都会被释放?这是否等同于在 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]);
}
4

1 回答 1

1

严格从您的问题来看,如果在堆栈上声明了所有在 getLCS 中声明的变量(没有任何类型的裸变量),那么它们将在函数完成后消失new。除此以外,别无其他。调用静态函数也不会创建一个新LCS类:类上的静态函数的行为几乎与自由函数完全一样,只是它们可以在其上放置访问修饰符以在类内限定范围。静态数据和方法独立于它们的类运行,除非您在成员函数中显式使用和混合它们

编辑:

请注意,所有 C++ 函数都是如此。当该函数/范围死亡时,在堆栈上创建的对象和原语将死亡/超出范围。作为额外的乐趣,您甚至可以通过在一些代码周围随意scope添加一些大括号来创建!{ /* ... */ }但通常没有必要做这样的事情。

祝你好运!

于 2013-04-12T02:24:12.240 回答