0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> numbers) {
int answer = 45;
for (int i = 0; i < numbers.size(); i++) {
answer -= numbers[i];
}
return answer;
}
Enemy클래스를 만들어 작성하였습니다.
일반 변수들은 대부분 스택 메모리 공간을 차지합니다.
스택 메모리의 가장 큰 특징은, 변수의 생존 주기가 끝나면 선언 시 할당되었던 메모리가 자동으로 회수된다는 점입니다.
따라서 사용자가 직접 메모리를 해제할 필요가 없습니다.
unique_ptr은 객체 소유권을 관리하는 스마트 포인터입니다. 즉, 단 하나의 포인터만 객체를 소유할 수 있습니다.
#include <iostream>
#include <memory> // unique_ptr 사용
using namespace std;
int main() {
// unique_ptr 생성
unique_ptr<int> ptr1 = make_unique<int>(10);
// unique_ptr이 관리하는 값 출력
cout << "ptr1의 값: " << *ptr1 << endl;
// unique_ptr은 복사가 불가능
// unique_ptr<int> ptr2 = ptr1; // 컴파일 에러 발생!
// 범위를 벗어나면 메모리 자동 해제
return 0;
}
shared_ptr 은 하나의 객체를 여러 개의 포인터가 함께 참조할 수 있는 스마트 포인터입니다. 내부적으로 레퍼런스 카운터를 관리합니다.
#include <iostream>
#include <memory> // shared_ptr 사용
using namespace std;
int main() {
// shared_ptr 생성
shared_ptr<int> ptr1 = make_shared<int>(10);
// ptr1의 참조 카운트 출력
cout << "ptr1의 참조 카운트: " << ptr1.use_count() << endl; // 출력: 1
// ptr2가 ptr1과 리소스를 공유
shared_ptr<int> ptr2 = ptr1;
cout << "ptr2 생성 후 참조 카운트: " << ptr1.use_count() << endl; // 출력: 2
// ptr2가 범위를 벗어나면 참조 카운트 감소
ptr2.reset();
cout << "ptr2 해제 후 참조 카운트: " << ptr1.use_count() << endl; // 출력: 1
// 범위를 벗어나면 ptr1도 자동 해제
return 0;
}
weak_ptr 은 레퍼런스 카운트를 증가시키지 않는 약한 참조방식으로 동작하는 스마트 포인터 입니다.
#include <iostream>
#include <memory>
class A {
public:
void say_hello() {
std::cout << "Hello from A\n";
}
};
class B {
public:
std::weak_ptr<A> a_ptr;
void useA() {
if (auto a_shared = a_ptr.lock()) { // 유효한지 확인
a_shared->say_hello();
} else {
std::cout << "A is no longer available.\n";
}
}
};
int main() {
std::shared_ptr<B> b = std::make_shared<B>();
{
std::shared_ptr<A> a = std::make_shared<A>();
b->a_ptr = a;
b->useA(); // A가 유효하므로 Hello 출력
} // A는 scope을 벗어나며 소멸됨
b->useA(); // A는 이미 소멸되었기 때문에 메시지 출력
}
복사 방식에는 얕은 복사와 깊은 복사가 있습니다. 일반적으로 포인터나 동적으로 할당된 자원을 관리하는 객체는 메모리 안정성을 위해 깊은 복사를 사용하는 것이 바람직합니다
'본캠프' 카테고리의 다른 글
| 5/8 (코드카타) (0) | 2026.05.08 |
|---|---|
| 5/7 (코드카타) (0) | 2026.05.07 |
| 텍스트던전rpg 분석 (0) | 2026.05.06 |
| 5/6 (개인프로젝트,과제2도전step8) (0) | 2026.05.06 |
| 4/30(코드카타) (0) | 2026.04.30 |