Modern C++ Design Pattern/Chapter 12. 프록시

created : 2020-04-12T14:10:03+00:00
modified : 2020-09-26T14:22:05+00:00
cpp design pattern proxy

스마트 포인터

속성 프록시

struct Creature { Property strength{ 10 }; Property agility{ 5 }; }

Creature creature; creature.agility = 20; auto x = creature.strength;


## 가상 프록시
* `nullptr`나 초기화되지 않은 포인터를 역참조하면 크래시가 발생함.
* `lazy instantiation`을 하여 불필요하게 일찍 자원이 할당되지 않게 할수 있다.
```cpp
struct Image
{
  virtual void draw() = 0;
};

struct Bitmap : Image
{
  Bitmap(const string& filename)
  {
    cout << "Loading image from " << filename << endl;
  }

  void draw() override
  {
    cout << "Drawing Image " << filename << endl;
  }
};

struct LazyBitmap : Image
{
  LazyBitmap(const string& filename)
    : filename(filename) {}
  ~LazyBitmap() { delete bmp; }
  void draw() override
  {
    if (!bmp)
      bmp = new Bitmap(filename);
    bmp->draw();
  }

private:
  Bitmap *bmp(nullptr);
  string filename;
};

커뮤니케이션 프록시

요약