ano*_*non 10 c++ garbage-collection design-patterns
我花了很长时间才意识到变量的重要性和微妙性:
1)存在于堆栈中
2)当它们超出范围时调用它们的析构函数
是.
这两件事允许这样的事情:
A)RAII
B)refcounted GC
有趣的是,(1)和(2)没有像C/Assembly这样的"低级"语言; 也不是像Ruby/Python/Java这样的"更高级"语言(因为GC会阻止可预测的对象破坏).
我很好奇 - 由于语言设计的选择,你知道的其他技术是非常C++的.
谢谢!
编辑:如果您的答案是"这适用于C++和其他语言",那也没关系.我想要了解的内容类似于:
通过选择不具有某些功能(如GC),我们获得了其他功能(如RAII +可预测的对象破坏).在C++的哪些领域,通过选择不具备其他"更高级别"语言所具有的功能,C++设法获得那些更高级别语言无法表达的模式.
我真的很喜欢特质课程。不完全特定于 C++(Scala 等其他语言也有),但它允许您调整对象,基本上是指定类型应支持的一组操作。想象一下,您想要一个“哈希器”,即tr1::hash. hash 是为某些类型定义的,但不是为其他类型定义的。如何创建一个为所有所需类型定义哈希值的类?您可以声明一个类,例如:
template < typename T>
struct hashing_tratis
{
typedef std::tr1::hash<T> hashing_type;
};
Run Code Online (Sandbox Code Playgroud)
也就是说,您期望使用定义了正确 hasing_type 的类。但是,哈希未定义,例如 for myType,因此您可以编写:
template <>
struct hashing_traits<myType>
{
typedef class_that_knows_how_to_hash_myType hashing_type;
};
Run Code Online (Sandbox Code Playgroud)
这样,假设您需要一种方法来散列您在程序中使用的任何类型(包括myType)。您可以通过创建 hasing 特征来编写“通用”哈希器:
template <typename T>
struct something {
typename hashing_traits<T>::hashing_type hasher;
.... // here hasher is defined for all your relevant types, and knows how to hash them
Run Code Online (Sandbox Code Playgroud)