반드시 필요한 순간에 대해서도 공부함.
-> 상수 객체를 위해서라도!
-> 상수 객체는 상수 함수만 호출할 수 있다는 특징이 있음.
sprintf 함수가 성능에 오버헤드가 크다고 하다면?
두 번, 동일한 값으로 호출하면 성능이 좋지 않음.
-> 캐시를 도입하자.
이런식으로 작성이 가능함.
-> 하지만 const 함수에서는 값 변경이 불가능한 성질이 있음.
그래서... const 성을 제거하는 mutable이 사용됨.
#include <iostream>
using namespace std;
//변하는 것을 변경되지 않는 클래스에서 분리함.
struct SCache
{
char cache_[16];
bool cacheValid_ = false;
};
class Point
{
public :
Point(int _x, int _y) : x_(_x), y_(_y) { pCache_ = new SCache; }
const char * ToString() const
{
if (pCache_->cacheValid_ == false)
{
sprintf(pCache_->cache_, "%d %d", x_, y_);
pCache_->cacheValid_ = true;
}
return pCache_->cache_;
}
private :
int x_, y_;
SCache *pCache_;
};
int main(void)
{
const Point p(1, 2);
cout << p.ToString() << endl;
cout << p.ToString() << endl;
}