Я хотел бы использовать следующую статическую функцию. Эта функция, в свою очередь, вычисляет входные данные, а std :: cout - результат. После того, как статическая функция вызывается и удаляется из стека, будет ли освобождена вся эта память, связанная с этим классом? Является ли это эквивалентом для того, чтобы сделать экземпляр этого класса в рамках основного, или он будет существовать только во время вызова этой функции? Предположим, что функция вызывается как она ниже в основной функции. Кроме того, дополнительные ссылки для чтения были бы замечательными.Статическая функция внутри класса, как будет обрабатываться память?
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]);
}
Я вижу. Таким образом, если бы эта функция предназначалась для выделения памяти в стеке для частной переменной в LCS, она была бы освобождена после того, как функция выходит за рамки. Скажем, если я использовал f1.resize (20) в getLCS. –
@JordanDillonChapian Да. Все объекты C++ очищаются, когда они выходят за рамки. Если вы создаете объект LCS в этой функции, он должен автоматически очищаться вместе с любыми выделенными вами векторами (эти объекты знают, как очистить себя, когда объекты выходят из области видимости). – 2013-04-12 02:35:19
Обратите внимание, что статичность функции getLCS не имеет значения. Те же правила для локальных переменных применяются, даже если getLCS не были статическими. –