은 다음 항목이 기본적으로 구성 배열 할당하면 될 것입니다, 그리고 당신은 예를 들어, 돌아가서 이후에 새로운 값으로 개별 Card
항목을 업데이트 할 수 있습니다
Card deck[52];
for (int i = 0; i < 52; ++i)
{
rank = ...;
suit = ...;
deck[i] = Card(rank, suit);
// better, add a method to the `Card` class to
// update the values without constructing any
// temporary instances at all...
//
// deck[i].set(rank, suit);
}
당신이 Card
포인터의 배열을 선언하는 경우에, 당신이 원하는 값으로 각 Card
항목을 초기화하기 위해 Card
생성자를 사용하지만 각 Card
항목에 대한 별도의 메모리 블록을 할당하는 비용, 예에서 할 수 있습니다
를
Card* deck[52];
for (int i = 0; i < 52; ++i)
{
rank = ...;
suit = ...;
deck[i] = new Card(rank, suit);
}
당신이 배열 대신 std::vector
를 사용하는 경우는 예를 들어, 두 가지를 결합 할 수 있습니다 : 당신이 placement new
연산자를 사용하는 경우 Card
전화를
std::vector<Card> deck(52);
for (int i = 0; i < 52; ++i)
{
rank = ...;
suit = ...;
deck[i] = Card(rank, suit);
// or:
// deck[i].set(rank, suit);
}
는, 당신은 실제로 '새'연산자를 이용할 수있다
unsigned char deck_buffer[sizeof(Card) * 52];
Card *deck = (Card*) deck_buffer;
for (int i = 0; i < 52; ++i)
{
rank = ...;
suit = ...;
new (&deck[i]) Card(rank, suit);
}
메모리 관리 각
Card
대해 별도의 메모리 블록을 할당하지 않고, 그리고 기본적으로 구조가 필요하고 별도, 예Card
값을 복사하여 할당없이 생성자 C++에서는 복잡한 문제입니다. 사람들은 그것에 관한 책을 씁니다. 읽어야합니다. –