H
Hans-Christian Stadler
Hi,
I'm wondering how C++ .NET initializes class members. I have code that
looks aproximately like this:
_gc class SuperClass;
// Factory object creates instances
_gc class Factory {
public:
virtual SuperClass* createInstance() = 0;
};
// Common interface
_gc class SuperClass {
public:
// available class factories
static ArrayList *factories = new ArrayList();
static SuperClass* createInstance(int factory) {
return dynamic_cast<Factory*>
(factories[factory])->createInstance()
}
virtual void doSomething(void) = 0;
};
// Class implementating SuperClass interface
_gc class BaseClass : public SuperClass {
public:
virtual void doSomething(void) {
Console::WriteLine(S"Hello");
}
};
// Factory object for BaseClass
_gc class BaseClassFactory {
private:
static BaseClassFactory *theInstance = new BaseClassFactory();
BaseClassFactory(void) {
SuperClass::factories->Add(this);
}
public:
virtual SuperClass* createInstance() {
return new BaseClass();
}
};
Client code would look like this:
SuperClass *sc = SuperClass::createInstance(0);
sc->doSomething();
The problem is, the BaseClassFactory constructor is never executed!
Hans
I'm wondering how C++ .NET initializes class members. I have code that
looks aproximately like this:
_gc class SuperClass;
// Factory object creates instances
_gc class Factory {
public:
virtual SuperClass* createInstance() = 0;
};
// Common interface
_gc class SuperClass {
public:
// available class factories
static ArrayList *factories = new ArrayList();
static SuperClass* createInstance(int factory) {
return dynamic_cast<Factory*>
(factories[factory])->createInstance()
}
virtual void doSomething(void) = 0;
};
// Class implementating SuperClass interface
_gc class BaseClass : public SuperClass {
public:
virtual void doSomething(void) {
Console::WriteLine(S"Hello");
}
};
// Factory object for BaseClass
_gc class BaseClassFactory {
private:
static BaseClassFactory *theInstance = new BaseClassFactory();
BaseClassFactory(void) {
SuperClass::factories->Add(this);
}
public:
virtual SuperClass* createInstance() {
return new BaseClass();
}
};
Client code would look like this:
SuperClass *sc = SuperClass::createInstance(0);
sc->doSomething();
The problem is, the BaseClassFactory constructor is never executed!
Hans