C++ 공부하다가 궁금한거 생김

====stock.h====

#ifndef STOCK
#define STOCK
#include <iostream>

using namespace std;

class Stock {

private:
    string name;
    int shares;
    float share_val;
    double total_val;
    void set_total() {total_val = shares * share_val;}
   
public:
    void buy(int, float);
    void sell(int, float);
    void update(float);
    void show();
    Stock compare(Stock&);
    Stock(string, int, float);
    Stock();
    ~Stock();
};
#endif

=================


====func.cpp====

#include "stock.h"

void Stock::buy(int n, float pr) {
    shares += n;
    share_val = pr;
    set_total();
}
void Stock::sell(int n, float pr) {
    shares -= n;
    share_val = pr;
    set_total();
}
void Stock::update(float pr) {
    share_val = pr;
    set_total();
}
void Stock::show() {
    cout << "===============" << endl;
    cout << "Company: " << name << endl;
    cout << "Share: " << shares << endl;
    cout << "Price: " << share_val << endl;
    cout << "Total price: " << total_val << endl;
}
Stock Stock::compare(Stock& s) {
    if (s.share_val > share_val)
        return s;
    else return *this;
}
Stock::Stock(string co, int n, float pr) {
    name = co;
    shares = n;
    share_val = pr;
    set_total();
}
Stock::Stock() {
    name = " ";
    shares = 0;
    share_val = 0;
    set_total();
}
Stock::~Stock() {
    cout << "===============" << endl;
    cout << name << "class annihilated" << endl;
}

================


====main.cpp====

#include <iostream>
#include "stock.h"
#include "func.cpp"

int main() {  
    Stock temp = Stock("dc", 100, 1000);
    temp.show();
    temp.buy(10, 1200);
    temp.show();
    temp.sell(5, 800);
    temp.show();
   
    Stock higher = Stock();
    Stock temp2("arca", 90, 1000);
higher = temp.compare(temp2);
    cout << "===============" << endl;
    cout << "Higher price stock" << endl;
    higher.show();


    return 0;
}

================


파일은 이렇게 main.cpp, func.cpp, stock.h 세개임

클래스 연습용으로 만든건데 Stock 클래스에 회사 이름(여기선 dc, arca), 가격, 개수, 총 가격(개수*가격)을 저장하는 클래스임

메서드는 buy는 판매, sell은 구매, update는 주식 가격 바뀌면 업뎃, show는 주식 정보 보여주기, compare는 클래스 두개 비교해서 가격 비싼 Stock 클래스 출력하는건데 위에서 main.cpp를 실행하면 이렇게 나옴


===============
Company: dc
Share: 100
Price: 1000
Total price: 100000
===============
Company: dc
Share: 110
Price: 1200
Total price: 132000
===============
Company: dc
Share: 105
Price: 800
Total price: 84000
===============
arcaclass annihilated
===============
Higher price stock
===============
Company: arca
Share: 90
Price: 1000
Total price: 90000
===============
arcaclass annihilated
===============
arcaclass annihilated
===============
dcclass annihilated


클래스 소멸이 언제하나 궁금해서 ~Stock에 안내문 출력하는 기능 달았는데 위에 굵게 처리한곳에서 arca 가 소멸하더라고.


클래스 소멸은 프로그램 끝나거나 클래스 재설정할때 소멸하는걸로 알고있음. 그래서 마지막에 클래스 세개(temp, temp2, higher) 소멸하고. 그런데 저 줄은 compare메소드 작동하는건데 왜 소멸하는지 궁금함