OO-Frage, Zugriff auf Parent



  • Hallo!

    Mal angenommen, ich habe eine Klasse 'Vater' und eine Klasse 'Kind'. Der Vater war fleissig und hat einige Millionen Kinder:

    class Vater
    {
    vector<Kind> vKids;
    };

    class Kind
    {
    ...
    }

    Die Kinder brauchen nun Zugriff auf ihren Vater, und da fallen mir zwei
    Möglichkeiten ein:

    1. Jedes Kind bekommt einen Pointer auf seinen Vater. Das ist unerwünscht,
      weil speicherintensiv.
    2. Es gibt in der Kind-Klasse eine statische Klassenvariable, die auf den
      Vater zeigt. Geht nicht, weil es vielleicht noch andere Väter gibt.

    Hm, bessere Ideen, wie man das speicherschonend implementieren kann?

    Danke,lg



  • wenn die kinder der reihe nach durch nummeriert sind, kannst du sagen kind 1-12311356 gehört zu vater 1. usw... sonst musst du dir halt die pointer merken, sollten ja nur ein paar MB sein.



  • Kommt drauf an, was man damit machen will. Die extreme Variante wäre natürlich:

    void Kind::update(Vater *vater)
    {
    //...
    }
    

    Man könnte 3 (bzw. 7) Bytes pro Kind sparen und bis zu 256 Väter zulassen:

    class Kind
    {
    public:
    
    	Kind(unsigned char vaterId)
    		: m_vaterId(vaterId)
    	{
    	}
    
    	static void registerVater(Vater *vater, unsigned char id)
    	{
    		ms_vaeter[id] = vater;
    	}
    
    private:
    	unsigned char m_vaterId;
    
    	static Vater *ms_vaeter[256];
    };
    


  • ^^wenn's wirklich sowas wie eine vater->kind beziehung sein soll, dann ist sie natürlich fest, also 'registerVater', mit 256 vätern pro kind, oder 'updateVater' hätten da nichts zu suchen.
    🙂



  • ;fricky schrieb:

    ^^wenn's wirklich sowas wie eine vater->kind beziehung sein soll, dann ist sie natürlich fest, also 'registerVater', mit 256 vätern pro kind, oder 'updateVater' hätten da nichts zu suchen.
    🙂

    Schon mal nachmittags SAT1 geschaut? Sowas gibts 😃



  • Icematix schrieb:

    Schon mal nachmittags SAT1 geschaut?

    nö, solche heuschrecken- und verblödungssender meide ich normalerweise.
    🙂



  • bts schrieb:

    1. Jedes Kind bekommt einen Pointer auf seinen Vater. Das ist unerwünscht,
      weil speicherintensiv.

    In was für einer Umgebung arbeitest du denn, das ein Pointer/Instanz zu viel Speicher braucht? Das sind auf einer 32Bit Maschine bei einer Million Kindern unglaubliche 4MB 🙄

    Hast du wirklich so wenig Speicher? Belegen die restlichen Daten der Kinder auch so wenig Speicher, dass der Pointer in Relation dazu nicht zu vernachlässigen ist?
    Solang das beides nicht zutrifft, würde ich nichtmal an irgendwelche anderen Lösungen denken.


Anmelden zum Antworten