C++primer 학습: 복사 제어(2)
분석 함수와 구조 함수는 상반된 조작을 수행하는데 이것은 클래스의 구성원 함수로 이름은 파도호와 클래스명으로 구성된다.반환 값이 없습니다. 인자를 받아들이지 않습니다.분석 함수는 유일하다
분석 함수는 언제 호출됩니까?
[1] 변수가 작용역을 벗어나다
[2] 객체가 제거되면 해당 구성원도 제거됩니다.
[3] 동적 분배 대상에 대해 바늘에 delete 조작을 적용할 때;
[4] 임시 대상의 경우 전체 표현식을 만들 때 삭제됩니다.
xigou 함수체 자체는 구성원을 소각하지 않으며 구성원은 분석 함수체 이후의 분석 단계에서 소각된다.
[연습]: Hasptr 클래스에 분석 함수 추가
lass Hasptr
{
public:
Hasptr(const string & s = string()) :ps(new string(s)), i(0) {}
Hasptr(const Hasptr & h) : ps(new string(*(h.ps))), i(h.i){} //
~Hasptr() {delete ps;}//
Hasptr & operator= (const Hasptr &h) //
{
delete ps;//
ps = new string(*h.ps);//
i = h.i;
return *this;
}
private:
string *ps;
int i;
};
[연습] 간단한 클래스를 정의함으로써 카피 클래스의 구성원을 익힌다.
class X
{
public:
X(){ cout << "X()" << endl; }
X(const X & x){ cout << "X(const X&)
"; }
X & operator=(const X &x){ cout << "operator=
"; return *this; }
~X(){ cout << "~X()
"; }
};
void f1(const X & test,const X x)
{
vector<X> vec;
vec.reserve(2);
vec.push_back(test);
vec.push_back(x);
}
int main()
{
//auto it = new X;//
//delete it;
X x;
f1(x, x);
return 0;
}
======================================================================================
하나의 기본 원칙: 하나의 클래스를 위해 분석 함수를 정의해야 한다. 그러면 이 클래스를 위해 자신의 구조 함수를 정의하고 복사 구조 함수를 복사해야 한다는 것을 거의 확신할 수 있다.
두 번째 기본 원칙: 만약에 하나의 클래스가 구조 함수를 복사해야 한다면 그것도 부수 연산자를 복사해야 한다.반대로 해도 마찬가지다.
[연습] 각 객체에 고유한 일련 번호를 지정하는 클래스를 정의합니다.고찰 함수는 인용을 형삼과 클래스로 형삼의 구별을 한다.
class numbered
{
public:
numbered() :isbn(++count){};
numbered(const numbered & n)//
{
isbn = ++count;
}
void mysn()const{ cout << isbn << endl; }
private:
size_t isbn;
static size_t count;//
};
size_t numbered::count = 0;//
void f(const numbered & s)
{
s.mysn();
}
void f2(const numbered & s)
{
s.mysn();
}
int main()
{
numbered a, b = a, c = b;
f(a); f(b); f(c);
f2(a); f2(b); f2(c);
return 0;
}
======================================================================================
복사를 막고 함수를 삭제 함수로 정의합니다: = delete;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.