티스토리 뷰
서버 공부를 하면서 클래스에 boost::noncopyable 을 상속받은 이유가 궁금해서 찾아보고 정리하게 되었습니다.
https://stackoverflow.com/questions/3518853/what-are-use-cases-for-boosternoncopyable
https://www.boost.org/doc/libs/1_44_0/libs/utility/utility.htm#Class_noncopyable
Boost 공식 문서에서 나온 설명은
Some objects, particularly those which hold complex resources like files or network connections, have no sensible copy semantics. Sometimes there are possible copy semantics, but these would be of very limited usefulness and be very difficult to implement correctly.
복잡한 리소스를 가지는 객체가 복사된다면, 클래스를 free 시키거나 네트워크 파일을 close 할 때 다루기가 힘들어진다.
이를 막기 위해 noncopyable 을 사용한다.
- noncopyable을 사용하지 않았을 때, useless_resources 가 복사되어 잘 동작한다.
- noncopyable을 사용했을때, 복사가 동작하지 않아 에러가난다.
중요한 리소스를 다루거나, 복사되면 안되는 객체에는 boost::noncopyable 을 상속하거나
#include <iostream>
#include <boost/noncopyable.hpp>
using namespace std;
using namespace boost;
class ComplexResources : boost::noncopyable{
public:
int something = 0;
};
int main(int argc, char** argv) {
ComplexResources origin_resources;
origin_resources.something = 1;
ComplexResources useless_resources;
useless_resources = origin_resources;
cout << useless_resources.something << '\n';
return 0;
}
복사 생성자, 복사 대입 연산자를 private 에 선언해서 복사되지 않도록 하자
#include <iostream>
using namespace std;
class ComplexResources {
public:
int something = 0;
ComplexResources() {};
private:
ComplexResources(const ComplexResources&);
ComplexResources& operator=(const ComplexResources&) {};
};
int main(int argc, char** argv) {
ComplexResources origin_resources;
origin_resources.something = 1;
ComplexResources useless_resources;
useless_resources = origin_resources;
cout << useless_resources.something << '\n';
return 0;
}
'개발 > 일상' 카테고리의 다른 글
백준 학교 랭킹 30위 달성 (2) | 2019.08.24 |
---|---|
boost shared_from_this() bad_weak_ptr Exception 문제 해결 (0) | 2019.08.13 |
boost::thread bind object (0) | 2019.08.07 |
c++ explicit 이란? (0) | 2019.07.27 |
개발 블로그 새로 시작!! (0) | 2019.07.19 |
- Total
- Today
- Yesterday
- vrpit
- 면접
- boost
- 잘못된 빨간줄
- 봄날에 스케치
- shared_from_this
- 카카오
- Visual Studio
- 우리는 vr핏이라고 부릅니다
- it's called a vrpit
- ad skip
- 에러 위치 찾기
- hole-punching
- 클래스 맴버 변수 출력하기
- print shared_ptr class member variable
- Quest2
- 영상 픽셀화 하기
- 코어 남기기
- C++
- Golang
- mysql
- RVO
- vr핏
- SuffixArray
- Obstacle Avoidance
- chrome-extension
- cockroach db
- Reciprocal n-body Collision Avoidance
- set value
- red underline
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |