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 ์ ๊ทผ ์ ์ด์๋ก ๋น ์์ฑ์๋ฅผ ๋ง๋๋ ํธ๋ฆญ์ ์ด์ ๊ทธ๋ง!