있냐??
예를들어 어떤 함수 안에 구조체랑 클래스 객체를 같이 선언했어
struct A;
class B;
void f(){
A a;
B b;
}
f함수가 종료될때
a객체 b객체는 다 사라짐?
아니면 참조만 사라지고 객체는 남아있음?
이게 확실하면 좋을거같은데
백준풀다가 구조체로 구현해보자하고 생각든건데
클래스로해도 될텐데 고수들 코드는 다 구조체로 구현하길래
뭔가 메모리 관련 차이가 있는건가 싶어서
- dc official App
접근제한차이
이 차이로 인해서 코드 길이가 짧아지는게 있어서 그런가
문법적으로는 private public 차이밖에 없지
public만 쓸거면 클래스를 왜씀 - dc App
아니 메모리적인 차이가 있냐고 클래스로 생성하면 힙으로 들어가고 구조체로 생성하면 스택으로 들어가서 나중에 함수 종료될때 메모리를 먹는지 안먹는지 궁금하다는거잖아. 그니까 클래스 구조체가 각각 어느 위치 에서 생성되는지 가비지 콜렉션이 필요가없는지 이런거 - dc App
예를들면 클래스는 힙에 구조체는 스택에 생성되어서 다르다 혹은 메모리적으로 아무 차이없다 니꼴리는거 써라 이런식으로 말해달라는거지 - dc App
차이 없음 꼴리는대로 써라. 힙에 생성은 구조체든 클래스든 new로 생성했냐 스택에 생성했냐 차이임 vtable도 가상함수 있냐 없냐로 갈리기 땜에 사실상 차이 없음
ㅇㅋ - dc App
글고 c++은 가비지 컬렉션 없다. 니가 직접 관리하든지 스마트 포인터나 raii로 관리하든지 알아서 해야됨.
가비지 컬렉션 없다고 들어서 물어본거임 혹시 클래스로하면 힙에 생성되고 가비지 컬렉션 안되서 고인물들이 클래스 안쓰는건가?하고 - dc App
ㅇㅇ 첨엔 모르니까 헷갈릴만 하지. int같은 primitive 타입이라 해도 new int로 하면 힙에 생성되니깐 타입은 중요하지 않고 생성 방식에 따라 결정되는 것만 알아두면 됨.
직접 해보면 되자나 동적할당 했으면 살아있고 그냥 지역 선언 했으면 스코프룰에 의해서 함수랑 같이 킬됨
그래서 니가 올린 글에 나오는 질문은 함수 사라질 때 둘다 사라짐.
접근제한말고 아무 차이없는거 맞음 농담 좀 해보자면 C++하면 제일 먼저 생각나는게 class일텐데 사실 class라는 키워드는 없어도 됨 두 경우에 쓰는데 클래스 선언할때랑 템플릿 선언할때인데 클래스 선언할때는 struct 쓰면 똑같고 템플릿 선언할때는 typename 쓰면 됨