2011-07-19 32 views
2

我知道如何防止在C++中動態實例化類。 (定義我自己的'新'運算符)但是有沒有一種簡單的方法來防止靜態實例化,以便強制動態實例?也就是說,我應該怎麼做這個...(這不是一個推導抽象基類只是一個簡單的類。)如何在允許動態實例的同時防止簡單C++類對象的靜態實例

class B { 

}; 

B b; // how do I prevent this without using friends or some derived class trick 

B* b; 
b = new B; // still want to be able to do this. 
+4

爲什麼要防止這種情況? – Nobody

+1

有什麼區別? – littleadv

回答

13

可以防止它通過使c'tor私人:

class B { 
B() {} 

public: 
    static B* alloc() { return new B; } 
}; 

而不是b = new B; 你會做什麼:b = B::alloc();

+2

我想你的意思是'b = B :: alloc();' – Nobody

+0

謝謝,對,這正是我的意思。 – Drakosha

1

可以防止它通過使c'tor私人:
class B { ... };
而不是b = new B;你會這樣做:b = B::alloc();

但這只是事實的一半,對吧?我仍然可以做一個

static B* b = B::alloc();

產生一個指向靜態對象(即主()的執行之前創建的) - 即這或多或少是一個靜態的對象,它只是位於堆。有沒有辦法來防止這種情況?

+0

如果有人付出了所有的努力,我相信他們知道他們在做什麼,並有一個很好的理由。 –