经典C++(C with Classes)的调用/返回功能,现代语言有什么用?

Ara*_*raK 10 c++ aop language-features programming-languages

C++的设计和演变的第57页上,Stroustrup博士讨论了一个最初属于C with Classes的功能,但它不是现代C++(标准C++)的一部分.该功能被调用call/return.这是一个例子:

class myclass
{
  call() { /* do something before each call to a function. */ }
  return() { /* do something else after each call to a function. */ }
  ...
};
Run Code Online (Sandbox Code Playgroud)

我觉得这个功能非常有趣.任何现代语言都有这个特殊功能吗?

Pot*_*ter 7

现代C++等价物将是一个哨兵对象:在函数的开头构造它,使用它的构造函数实现call(),并在返回(或异常退出)时,它的析构函数实现return().

  • Sentry对象确实非常相似.一方面,它们需要显式实例化(并传递`this`),但另一方面,您可以添加它们,这样它们不仅可以检查类的不变量,还可以检查手头函数的一些前/后条件. (2认同)