2012-06-12 3 views
9

저는 구조체를 고정 된 크기의 객체로 생각했습니다. 컴파일러 오류가 눈에 띄지 않는 반면, 일반적으로 잘 수행되고 있는지 궁금합니다. 구조체를 클래스로 변경하는 것이 더 바람직할까요 아니면 구조체가 그렇게할까요?구조체에 벡터를 저장할 수 있습니까? C++

코드는, 사람들은 까다로운 얻으려면, 그 때문에 :

struct Sprite 
{ 
    float x; 
    float y; 
    std::vector<Sprite> sprite; 
} 

부모와 같은 형식으로 클래스의 아이들을 데 내가 뭐하는 거지의 본질. 부모가 죽으면 아이들도 그렇게합니다.

+7

'struct'는'private' 대신에'public'의 디폴트 가시성을 가진 클래스입니다. –

+2

struct에 contructor/destructor가있는 멤버를 추가하면 컴파일러가 구조체의 생성자/소멸자를 방출하게됩니다. POD 구조를 암시하는 C 스타일 기법은 작동하지 않습니다. –

+0

구조체 내에 벡터를 저장해도 크기가 변경되지 않습니다. 벡터의 항목은 힙에 저장되므로 구조체의 크기는 벡터에 0 또는 1000 개의 요소가 있는지에 관계없이 동일하게 유지됩니다. – mfontanini

답변

15

std::vector은 특정 크기를 가지고 있으며이를 포함하는 모든 클래스 또는 구조체는 알려진 크기를가집니다. std::vector은 힙에 메모리를 할당하여 가변 크기 배열로 작동하고 상기 메모리에 대한 포인터를 저장합니다. 구조체와 클래스의 유일한 차이점은 구조체는 기본적으로 public이며 클래스는 기본적으로 private입니다. structclass 사이

+0

감사합니다. 벡터가 힙의 메모리에 대한 포인터로만 사용된다는 것은 분명히 이해할 수 있습니다. 자세한 답장을 보내 주셔서 감사합니다. –

+0

기본적으로? 기본적으로? – Inverse

7

의 차이는 회원 가시성을 할 필요가 : 가장 주목할만한 차이가 struct의 구성원이 기본적으로 공개하고, 또한 struct의 상속은 기본적으로 공개한다는 것입니다; class 구성원과 class 상속은 기본적으로 모두 비공개입니다. 그 외에는 차이가 없습니다. class으로 작성된 코드와 동일한 코드를 생성하는 코드 인 struct을 항상 작성할 수 있으며 그 반대의 경우도 마찬가지입니다.

관련 문제