#include <iostream>
using namespace std;

class K{
public:
  K() { cout << "ctor" << endl; }
  K(const K &k) { cout << "copy ctor" << endl; }
  ~K() { cout << "dtor" << endl; }
};
typedef K *PK;

void g(K **k) {
  delete *k;
}

void f(K &k) {
  K *k1, k2(k), **k3;
  k1 = new K(k2);
  k3 = new PK;
  *k3 = new K(*k1);
  g(k3);
}

int main() {
  K k;
  f(k);
}