Статическая функция в классе, как будет обрабатываться память?

Я хотел бы использовать следующую статическую функцию. Эта функция, в свою очередь, будет вычислять входные данные, а 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]);
}

0

Решение

Судя строго по вашему вопросу, все переменные объявленный внутри getLCS умрет после выполнения функции, если они объявлены в стеке (не голые new любого вида). Ничто другое не должно жить за пределами этого. Вызов статической функции также не создает новый LCS class: статические функции в классах ведут себя почти так же, как и свободные функции, за исключением того, что на них могут быть помещены модификаторы доступа для определения области внутри класса. Статические данные и методы работают независимо от их классов, если вы явно не используете и не смешиваете их в функциях-членах..

РЕДАКТИРОВАТЬ:

Обратите внимание, что это верно для ВСЕХ функций C ++. Объекты и примитивы, которые сделаны в стеке, умрут / выйдут из области видимости, когда умрет эта функция / область видимости. В качестве бонуса вы можете даже создать scope ударив по брекетам { /* ... */ } вокруг некоторого кода произвольно! Но обычно нет необходимости делать такие вещи.

Удачи!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]