回 帖 发 新 帖 刷新版面

主题:[讨论]用类中的static函数创造对象并返回对象指针

今天在公司的code里面发现一段:

class A
{
public:
    A();
    static A* createA(){
    A* p_a= new A();
    return p_a;
    }
    void dosomething(){
    cout<<"doing something";
    }
}

main
{
    A* a=A::createA();
    a->doSomething();
}

结果可以编译运行。请大虾们指教一下,这是正确的用法吗?如果是,哪种情况下可以用到这样的code.如果有问题,问题出在哪里?多谢!

回复列表 (共4个回复)

沙发

正常代碼,您可以看看關于“虛構造行為的模擬”的資料。在反序列化時,更具體的說是在動態創建未知類型的對象時,就會用到這個技術。

板凳

比较高深,学习!楼上所说的“虚构造行为”是不是就是指“虚构造函数”?对于动态创建未知类型的对象能否举个简单的例子?

3 楼

具體的方法有多種,一般是有一個虛基類,它有一個虛Create方法,這個方法在每個新派生類里都必須實現,故在創建一個不確定類型(這個叫法比未知類型更為確切,個人認為)時,僅需要把它的現有數據傳遞給Create方法便可實現“從數據創建”這一個過程。
當然,“虛構造”技術還有其他的應用。但最多的就是在C#和JAVA/Object Pascal里用到的一個詞語:反射。呵呵~~~~

4 楼

不過在C++里,實現反射確實非常痛苦,基本是靠代碼湊出來的“假反射”,只是有點兒跑題,所以俺就不接著說了:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册