티스토리 뷰

technote/C++

따배씨 9-9~ 9-12

HTS3 2018. 10. 26. 00:39

1. 9-9 복사 생성자, 복사 초기화, 반환값 최적화 (Return value optimization)

Fraction(const Fraction &fraction) //copy constructor

: m_numerator(fraction.m_numerator), m_denominator(fraction.m_denominator)

{

cout << "Copy constructor called" << endl;

}

- Fraction frac_copy = frac; 이 경우에도 copy constructor는 호출 된다.

- Fraction frac_copy(frac); 원래는 이렇게 하려한거임!

- Fraction frac_copy(Fraction(2,3)); 익명객체로 할 시에는 복사생성자 호출안함



<10/25>

2. 9-10 변환 생성자(converting constructor) explicit, delete

- doSomething(7); 도가능 7을 생성자에 넣는다

- explicit 은 위의 행위를 막을 수 있다.

- Fraction(char) = delete;

3. 9-11 대입 연산자 오버로딩, deep copy, shallow copy

- cout << (int*)hello.m_data << endl; m_data가 char*형인데 cout 이 문자열로 인식하기 때문에 int*로 캐스팅해서 주소값을 확인

- 생성될 때 복사생성자를 호출한 인스턴스는 생성자호출을 안했으므로 

~MyString()

{

delete[] m_data;

}

부분에 문제가 생긴다. shallow 카피의 문제라는 것

- [깊은 복사]

MyString(const MyString &source)

{

cout << "Copy constructor" << endl;

m_length = source.m_length;

if (source.m_data != nullptr)

{

m_data = new char[m_length];

for (int i = 0; i < m_length; i += 1)

{

m_data[i] = source.m_data[i];

}

}

else

m_data = nullptr;

}

- [대입 연산자 오버로딩]

MyString& operator = (const MyString & source)

{

cout << "Assignment operator" << endl;

if (this == &source) // prevent self-assignment

return *this;

delete[] m_data;

m_length = source.m_length;

if(source.m_data != nullptr)

{

m_data = new char[m_length];

for (int i = 0; i < m_length; i += 1)

{

m_data[i] = source.m_data[i];

}

}

else

m_data = nullptr;

return *this;

}

- MyString str1 = hello; <== 깊은 복사

  MyString str2; str2 = hello; <== 대입 연산자 오버로딩

 

- 아예 copy 를 막는법 : MyString(const Mystring &source) = delete;

3. 9-12 Initializer list

IntArray(const std::initializer_list<int> &list) : IntArray(list.size)

{

int count = 0;

for (auto &element : list)

{

m_data[count] = element;

++count;

}

}

'technote > C++' 카테고리의 다른 글

따배씨 11-2  (0) 2018.11.01
따배씨 11.1  (0) 2018.11.01
따배씨 9-5 ~ 9-8  (0) 2018.10.24
따배씨 9-1 ~ 9-4  (0) 2018.10.24
따배씨 8-12 ~ 8-15  (0) 2018.10.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함