본문 바로가기
C++ STL, 알고리즘

C++ 알쓸신잡

by wanna_dev 2024. 10. 2.

함수 호출 로그는

cout << __func__ << endl;

스택 프레임 : 함수간 메모리공간을 격리시키는 역할

스택영역에서는 동작방식때문에 컴파일 시점에 각 스택 프레임의 크기가 결정되어야 한다. 스택 프레임의 크기가 사전에 결정되기 때문에 가변 크기 배열을 함수의 로컬변수로 선언할 수 없다.

<memory> 헤더에 unique_ptr이라는 스마트 포인터가 있음.

unique_ptr<int[]> myVar (new int[arraySize]);
shared_ptr<AirlineTicket> myTicket2(new AirlineTicket());
AirlineTicket* myTicket3 = new AirlineTicket();
delete myTicket3;

auto smartCellp = std::make_unique<SpreadsheetCell>(4);
auto mySimpleSmartPtr = make_shared<Simple>();

일일이 메모리 해제를 신경쓰지 않아도 되도록 해줌.

해당 메모리가 스코프에서 벗어날 때 자동으로 메모리 해제를 수행한다.

*: 역참조

필드접근 : .

역참조 + 필드접근 : →

.get()함수로 함수 파라미터로 전달

.resut() : 리소스 해제후 nullptr로 초기화

mySimpleSmartPtr.reset(new Simple()); : 리소스 해제후 새로운 Simple 인스턴스로 설정

unique_ptr은 단독 소유권을 표현하기 때문에 복사할 수 없다.

shared_ptr의 경우, use_count()로 동일 리소스를 공유하는 shared_ptr의 개수를 알 수 있다.

vector를 사용하는 이유 : 유연하고 안전하다.

vector를 사용하면, 런타임에 동적으로 항목을 추가/삭제할 수 있고 그에 따른 메모리 할당/해제도 자동으로 해주기 때문에 편리하다. 이러한 컨테이너 항목을 순회하기 위해 iterator개념이 있다.

#include<string>
#include<vector>
#include<iostream>
using namespace std;
int main(){
	// 문자열 벡터 객체 생성. c++11의 유니폼 초기화를 이용
	vector<string> myVector = {"A first string", "A second string"};
	myVector.push_back("A third string");
	myVector.push_back("The last string in the vector");
	for(auto iterator = myVector.cbegin(); iterator != myVector.cend(); ++iterator){
		cout << *iterator << endl;
	}
	
	for(auto& str : myVector) cout << str << endl;
	return 0;
}
for(vector<string>::const_iterator iterator = myVector.begin(); 
	iterator != myVector.end(); ++iterator){
	cout << *iterator << endl;
}

C++ 디자인의 두가지 원칙

:: 추상화, 재사용

추상화 : 내부 구현과 외부 인터페이스를 깨끗하게 분리

재사용 :

s : 작업준비시간

C : 비례상수

t : 작업정리시간

외부업체 : 3rd party

void* 형식은 type-safe하지 않다.

즉, 데이터를 이용하거나 저장할 때 그 타입이 목적하는 것과 같은지 검사할 방법이 없다.

데이터를 이용하려면 void* 내에 의도했던 타입으로 다시 캐스팅해야하는데 이러한작업은 원래 데이터 타입이 캐스팅하는 타입과 다를 수도 있기 때문이다.

 

 

출처 : 전문가를 위한 C++

'C++ STL, 알고리즘' 카테고리의 다른 글

C++ 생성자  (0) 2024.10.02
OOP  (0) 2024.10.02
c++ static  (0) 2024.10.02
c++ 복습을 위한 링크  (0) 2024.08.30
DP 다이나믹 프로그래밍 Dynamic Programming  (0) 2023.11.22