Passare per argomento e mantenerlo come membro

0

Non riesco davvero a decidere quale sia l'opzione migliore, vedo un sacco di down / upside ad entrambi gli approcci e in questo momento sono indeciso.

Ad esempio;

class DX11GBuffer
{
public:
    DX11GBuffer(ID3D11DevicePtr device, ID3D11DeviceContextPtr context, D3D11_TEXTURE2D_DESC backbufferTextureDesc);
    ~DX11GBuffer();

    void BindForGeometryStage(ID3D11DepthStencilViewPtr dsv);
    // ...
}

"dsv" non è di proprietà dell'oggetto e quindi ha passato ogni frame, ma potrebbe anche essere passato come argomento nel costruttore e memorizzato, visto che si tratta di un puntatore intelligente.

Credo che quello che sto capendo sia che capisco che ci sono delle insidie nel mantenere troppi stati in un oggetto, ma anche nel passare così tanto come gli argomenti delle funzioni significano un sacco di ASCII. Allo stesso modo, la definizione di "oggetti argomento", raccolta di dati per funzioni, sembra aggiungere un po 'di overhead anche se deve essere applicata ovunque come regola empirica.

Suppongo di osservare alcune linee guida generali su quando passare come argomento rispetto a quando memorizzarlo come membro.

    
posta KaiserJohaan 25.12.2014 - 15:18
fonte

1 risposta

2

Le variabili membro sono variabili sono una relazione "ha una" (il rettangolo ha una larghezza). Se l'oggetto non ha la variabile allora dovrebbe essere passato in esso per essere usato dove richiesto, se è correlato all'oggetto stesso, allora dovrebbe essere memorizzato nell'oggetto.

Un modo rapido per testare la relazione potrebbe essere vedere quanto quell'oggetto utilizza la variabile. Se lo si utilizza in una sola unità di codice, lasciarlo così com'è (essere passato dentro), tuttavia se più funzioni all'interno di quell'oggetto fanno uso di esso allora memorizzarlo come variabile membro probabilmente avrebbe più senso.

    
risposta data 25.12.2014 - 17:55
fonte

Leggi altre domande sui tag