c++

c++ 복사 생성자 관련

isaacagent 2024. 1. 15. 23:23
728x90
#include <iostream>
#include <stdio.h>

class Product{
private:
    int P_Data;
public:
    Product() = default; // 기본생성자 보장
    Product(const Product& input); //복사 생성자
    void setData(int data);
    int getData();
}
Product::Product(const Product& input)
{
    printf("복사생성자입니다\n");
    P_Data = input;
}
void Product::setData(int data)
{
    P_Data = data;
}
int Product::getData()
{
    return P_Data;
}

int main(){
    Product p1{}; //기본 생성자 호출
    p1.setData(100);
    Product p2 = p1; // Product p2 (p1); 도 가능
    printf("%d\n", p2.getData());
}

간단한 추가 설명을 하자면, 일단 복사 생성자도 생성자의 일종이기 때문에 복사 생성자를 호출을 한 후 기본 생성자를 호출을 하려고 하면 에러가 뜰 것이다.

그 점을 보완해주기 위해서 기본 생성자 = default 라는 값을 넣어서 main에서 기본 생성자도 호출을 할 수 있게 한다.

 

 

#include <iostream>
#include <stdio.h>

class Product2{
private:
    int* P2_Data;
public:
    Product2() = default; // 기본생성자 보장
    Product2(const Product&) = delete; //얕은 복사 제한
    void init(int* data);
    void printData();
}
void Product2::init(int* data)
{
    P2_Data = data;
}
void Product2::printData()
{
    printf("%d\n",*P2_Data);
}

int main(){
    int nData{};
    
    Product2 p1{};
    
    nData = 100;
    
    c1.init(&nData);
    
    
    //Product2 p2 = p1; 은 얕은 복사 제한 때문에 에러 처리 남. Product2 p2 (p1)도 동일
    Product2 p2{};
    
    p2 = p1;
    
    p2.printData();    
}

'c++' 카테고리의 다른 글

C++ 동적 할당  (0) 2024.01.17
Call by value 와 Call by reference  (0) 2024.01.15
c++ 생성자(constructor)  (1) 2024.01.10