static 사용

😎·2022년 11월 29일
0

CPP

목록 보기
10/46

static

static 으로 변수나 함수를 선언하면, 컴파일 단계에서 메모리에 적재된다. static이 아니라면 스택 또는 힙 메모리 영역을 돌아다니며 메모리를 할당하고 해제하며 이용하겠지만, static 이기 때문에 프로그램이 실행되서 종료되기 전까지 한 메모리를 계속해서 차지하게 된다.

이로써 발생하는 상황은 한 클래스의 static 멤버는 여러 인스턴스를 생성한다해도 초기화 되지 않고 이전의 값을 갖고 있다는 것이다.


예시

  • Sample.class.hpp
#ifndef SAMPLE_CLASS_H
# define SAMPLE_CLASS_H

class Sample {
    public:

        Sample(void);
        ~Sample(void);

        static int  getNbInst(void);
    
    private:
        static int     _rbInst;
};

#endif
  • Sample.class.cpp
#include <iostream>
#include "Sample.class.hpp"

Sample::Sample(void) {
    std::cout << "Constructor caled" << std::endl;
    Sample::_rbInst += 1;

    return;
}

Sample::~Sample(void) {
    std::cout << "Destructor called" << std::endl;
    Sample::_rbInst -= 1;
    return;
}

int Sample::getNbInst(void) {
    return Sample::_rbInst;
}

int Sample::_rbInst = 0;
  • main.cpp
#include <iostream>
#include "Sample.class.hpp"

void    f0(void){
    Sample instance;

    std::cout << "Number of instances : " << Sample::getNbInst() << std::endl;

    return;
}

void    f1(void){
    Sample instance;

    std::cout << "Number of instance : " << Sample::getNbInst() << std::endl;
    f0();

    return;
}

int main() {
    std::cout << "Number of instances : " << Sample::getNbInst() << std::endl;
    f1();
    std::cout << "Number of instances : " << Sample::getNbInst() << std::endl;

    return 0;
}

main.cpp 파일에 f0 과 f1 함수에서 각각 새로운 인스턴스를 생성한다. 하지만 Sample 클래스에 선언된 static 변수 static int _rbInst를 호출하면 생성자에 의해 값이 증가된 결과가 유지되는 것을 확인할 수 있다.

생성자에서 증가하는 코드는 Sample::_rbInst += 1; 이다.

profile
jaekim

0개의 댓글