c++ - 允许仅使用动态分配来分配对象

标签 c++ coding-style c++11 dynamic-allocation new-operator

<分区>

我正在开发一个小型图书馆,其中我对任何 X 类 都有以下要求:

  1. class X 必须只能使用 operator new
  2. 进行分配
  3. X 类 的所有子级都应该隐式变为可分配的 仅由 operator new
  4. 堆分配的语法应该优雅
  5. 无需更改太多现有代码即可将其合并
  6. 一段时间后,如果我想让 class X 可分配 作为自动;同样不需要更改太多代码

我也欢迎 C++0x 解决方案(仅供将来使用)。

[注意:我已经完成了我的部分研究并将其作为答案发布(针对基本场景进行了测试)]

最佳答案

// Dynamic.h
class OnlyDynamic
{
  template<class T> friend struct Dynamic;
  virtual void*** __Restriction () = 0;
};

template<class T>
class Dynamic : public T
{ 
  virtual void*** __Restriction () { return 0; }
  ~Dynamic();
public:
#ifdef Cpp0x
  template<typename... Args>
  Dynamic(Args... args) : T(args...) {}
#else
  Dynamic () {}
  template<typename A1> Dynamic(const A1 &a1) : T(a1) {}
  template<typename A1, typename A2> Dynamic(const A1 &a1, const A2 &a2) : T(a1,a2) {}
//...
  template<typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
  Dynamic(const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5, const A6 &a6) : T(a1,a2,a3,a4,a5,a6) {}
#endif 
};

用法:


假设,我想制作 class X只能动态分配;我应该简单地导出 OnlyDynamic (访问说明符无关紧要)并分配 new Dynamic<X>() .

例子:

class Base {};

struct A : Base, OnlyDynamic  // <-- only inherit
{
  A (int i) {}
};

A *p = new Dynamic<A>(3);
delete p;

截至目前,我发现此解决方案已满足所有给定要求。

关于c++ - 允许仅使用动态分配来分配对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7049204/

相关文章:

c++ - 将文本文件读入 char 数组。 C++ ifstream

c++ - 为什么 value_type 函数在 SGI STL 中返回一个指针

c++ - 做一个函数还是不做一个函数

c++ - 为什么模板实例化永远在这里进行?

c++ - 将 Windows 头文件包装在命名空间中安全吗?

asp.net - 您的 aspx 页面中的内联代码是一种好习惯吗?

java - 与内部实现的接口(interface)——好还是坏

c++ - 当调用具有等待条件变量的线程对象的析构函数时会发生什么?

boost::lock_guard 与 boost::mutex::scoped_lock

c++ - 缓存函数结果,包括 maybe void