cpp_default_delete - 8BitsCoding/RobotMentor GitHub Wiki

cpp_cpp11_default_delete

๊ธฐ์กด์˜ ๋ฌธ์ œ์ ์„ ๋จผ์ € ํ™•์ธํ•˜์ž

class Dog{
private:
    std::string mName;
    int mAge;
};

int main() {
    Dog myDog;
    Dog copiedMyDog(myDog);     // ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•”์‹œ์  ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.(๊ธฐ๋ณธ์ƒ์„ฑ์ž/๋ณต์‚ฌ์ƒ์„ฑ์ž)
}

๋”ฐ๋ผ์„œ ์•”์‹œ์  ์ƒ์„ฑ์ž๋ฅผ ๋ง‰๊ธฐ์œ„ํ•ด์„œ ๋นˆ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค๊ธฐ๋„ ํ–ˆ๋‹ค.

Dog();

Dog::Dog()
{

}

๊ทผ๋ฐ ์ด ์•„๋ฌด ์˜๋ฏธ ์—†๋Š” ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด ๋ญํ•ด??

์—ฌ๊ธฐ์„œ default์˜ ํ•„์š”์„ฑ์„ ๋А๋ผ๊ฒŒ ๋œ๋‹ค.


default

class Dog {
public:
    Dog() = defulat;        // ์ปดํŒŒ์ผ๋Ÿฌ์•ผ ์•Œ์•„์„œ ๋งŒ๋“ค์–ด์ค˜
    Dog(std::string name);
private:
    std::string mName;
};
  • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํŠน์ •ํ•œ ์ƒ์„ฑ์ž, ์—ฐ์‚ฐ์ž ๋ฐ ์†Œ๋ฉธ์ž๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ฝ”๋”๊ฐ€ ์ƒ์„ฑ์ž, ์†Œ๋ฉธ์ž๋ฅผ ๊ตฌ์ฒดํ™”ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๊ธฐ๋Šฅ!

delete

C++11์ด์ „์— ๋ณต์‚ฌ์ƒ์„ฑ์ž๋ฅด ๋ง‰๋Š” ๋ฐฉ๋ฒ•์€

class Dog {
public:
    // ...

private:
    Dog(const Dog& other);  
    // private์— ์ˆจ๊ธฐ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒŒ ๊ณผ์—ฐ ์ง๊ด€์ ์ธ๊ฐ€??
};
Dog(const Dog& other) = delete;
// ์ง๊ด€์ ์œผ๊ณ  ๋ช…ํ™•
  • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ธธ ์›์น˜ ์•Š๋Š” ๋‹ค๋ฉด
  • private ์ ‘๊ทผ ์ œ์–ด์ž๋กœ ๋นˆ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“œ๋Š” ํŠธ๋ฆญ์€ ์ด์ œ ๊ทธ๋งŒ!