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

Static function within class, how will memory be handled?

本文关键字:处理 内存 何处理 静态函数      更新时间:2023-10-16

我想使用以下静态函数。这个函数将依次计算输入,然后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]);
}

严格从你的问题判断,所有在getLCS内部声明的变量将在函数完成后死亡,如果它们是在堆栈上声明的(没有任何类型的裸new)。除此之外,任何东西都不应该存在。调用静态函数也不会创建一个新的LCS类:类上的静态函数的行为几乎与自由函数完全相同,除了它们可以在类中放置访问修饰符以限定作用域。静态数据和方法的操作独立于它们的类,除非在成员函数中显式地使用它们并将它们混合在一起。

编辑:

注意所有c++函数都是如此。当函数/作用域结束时,在堆栈上生成的对象和原语也将退出作用域。作为额外的乐趣,您甚至可以创建scope通过拍打一些括号{ /* ... */ }周围的一些代码任意!但是通常没有必要这样做。

祝你好运!