// 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;
截至目前,我看到所有給定的要求得到滿足與此解決方案。
的可能重複[是否有可能阻止對象的堆棧分配,只允許它與「新」來instiated?](http://stackoverflow.com/questions/124880/is-it-possible-to -prevent-stack-allocation-of-object-and-only-allow-it-to-be-i) – cdhowie
@iammilind:如果你已經有一個解決方案,你是否將這張貼發佈爲其他人的測試?如果不是,請張貼您的方法,然後徵求批評者的意見或支持。 –
你的意思是「沒有太多現有的代碼應該改變」?我們不知道你現有的代碼是什麼,所以我們不能告訴你會有多大的變化。 – foxy