Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- 코딩
- 재귀함수
- 개발자
- C++
- 내가해냄
- 게임개발
- 얌얌코딩
- 프로그래밍
- TPS
- 연산자오버로딩
- permutation
- 자료구조
- 구조체
- UE5
- 오늘의에러
- 구조체포인터
- 커스텀로그
- 게임프로그래밍
- 언리얼
- 백준
- 미라클모닝
- 개발
- 탐색기법
- c++자료구조
- dfs
- fstring
- 코딩테스트
- unreal
- 링크드리스트
- 언리얼로그
Archives
- Today
- Total
All is well
[YYBASIC0401/얌얌코딩] std::string 클래스 만들어보기 본문
#include <iostream>
namespace ya
{
class string
{
public:
// 기본 생성자: mStr을 nullptr로 초기화하여 정의되지 않은 동작을 방지
// 멤버 이니셜라이저(:)를 사용하여 mStr을 직접 초기화함으로써 불필요한 대입을 방지하고 성능 최적화
string() : mStr(nullptr)
{
std::cout << "nullptr\n"; // 디버깅용: 기본 생성자가 호출되었음을 알림
}
// C 스타일 문자열을 사용하여 객체를 초기화하는 생성자
// 멤버 이니셜라이저(:)를 사용하여 mStr을 nullptr로 초기화한 후, 동적 할당을 통해 문자열을 저장
string(const char* str) : mStr(nullptr)
{
// str이 null이 아님을 가정하고, 입력 문자열의 길이를 계산
int len = strlen(str);
// 문자열과 널 종료문자('\0')를 저장할 메모리를 동적으로 할당
mStr = new char[len + 1];
// 문자열을 한 글자씩 복사
for (size_t i = 0; i < len; i++)
{
mStr[i] = str[i];
std::cout << mStr[i] << '\n'; // 디버깅용: 복사되는 문자 출력
}
std::cout << "\n"; // 디버깅용: 복사 완료 후 줄바꿈 출력
// 문자열 끝에 널 종료문자('\0')를 추가하여 올바른 문자열 형식을 유지
mStr[len] = '\0';
}
// 소멸자: 동적으로 할당된 메모리를 해제하여 메모리 누수를 방지
~string()
{
delete[] mStr;
}
private:
// 문자열을 저장하는 동적 할당된 메모리의 포인터
char* mStr;
};
}
int main()
{
// 표준 라이브러리의 std::string을 선언 및 초기화
std::string hello = "Hello!";
// 기본 생성자로 ya::string 객체를 생성 (mStr이 nullptr로 초기화됨)
ya::string yaHello1;
// 기본 생성자를 사용한 임시 객체를 생성한 후, 이를 yaHello2에 복사하여 초기화
// 주의:
// 1. C++ 컴파일러는 최적화를 통해 불필요한 복사를 줄이는 RVO(Return Value Optimization)를 수행할 수도 있음
// 2. 하지만 일부 컴파일러나 특정 상황에서는 RVO가 적용되지 않아 객체가 복사될 가능성이 있음
// 3. 즉, yaHello2는 ya::string()을 호출하여 생성된 임시 객체에서 복사되지만,
// RVO가 적용되지 않으면 불필요한 복사 생성자가 호출될 수도 있으므로 권장되지 않음
ya::string yaHello2 = ya::string();
// C 스타일 문자열을 사용하여 ya::string 객체를 초기화
ya::string yaHello3 = "Hello!"; // 문자열을 받는 생성자 호출
ya::string yaHello4("Hello!"); // 동일한 방식의 객체 초기화
return 0;
}
// 디버깅용 코드 실행 결과




'C++ > YYBASIC' 카테고리의 다른 글
| [YYBASIC0307/얌얌코딩] 연산자 오버로딩(Operator Overloading) (0) | 2025.03.08 |
|---|---|
| [YYBASIC0306/얌얌코딩] 링크드 리스트 클래스 만들기 (0) | 2025.03.07 |
| [YYBASIC0305/얌얌코딩] C++ Template(템플릿) (0) | 2025.03.05 |
| [YYBASIC0304/얌얌코딩] AddNode 구현, 링크드리스트 출력 (0) | 2025.03.03 |
| [YYBASIC0303/얌얌코딩] 링크드 리스트 설명, 동적 할당 설명 (0) | 2025.02.16 |