2011-10-05 30 views
5

Come ho capito, ogni istanza di una classe ha le proprie variabili membro in memoria, in modo che possa memorizzare valori diversi per oggetti diversi. Tuttavia, non è lo stesso per le funzioni dei membri. Le funzioni membro vengono riutilizzate tra gli oggetti di una classe, quindi ha solo un indirizzo con un blocco di memoria da riferire quando necessario a tutti gli oggetti.Differenza tra metodo statico e funzione non statica in memoria

Funzione statica per accedere a membri statici. Tuttavia, la funzione statica esiste anche solo durante il ciclo di vita della sua applicazione. Oltre ad essere l'accessor statico, a basso livello non è diverso con le normali funzioni di classe, non è vero? O forse mi sbaglio, che ogni classe ha le sue funzioni?

risposta

2

Differisce da lingua a lingua, ma in C o C++ 03 le funzioni generalmente si riferiscono alle funzioni di assemblaggio; cioè esistono una volta nella memoria (funzioni libere, funzioni di classe o funzioni statiche di classe) e accettano argomenti come parametri, incluso un puntatore this per le funzioni membro implicito.

In C++ 11, le funzioni lambda introducono una novità: ogni istanza della cosiddetta funzione porterà uno stato. Dal punto di vista dell'implementazione, significa quindi che è necessario creare una funzione "regolare" ed è associata a un fascio anonimo di dati (se necessario). La funzione non deve essere duplicata ogni volta che viene creato il lambda, ma i dati lo fanno. Una figura utile è ricordare che lambdas (in C++) sostituisce oggetti funzione (o oggetti predicato): sono solo zucchero sintattico, l'implementazione è simile.

6

Le funzioni non statiche accettano il parametro aggiuntivo, this, che è il puntatore all'istanza di classe con le variabili specifiche dell'istanza.

Le funzioni statiche non hanno questo parametro (non è quindi possibile utilizzare this in una funzione statica e accedere solo ai membri dei dati statici).

0

L'unica differenza tra le funzioni statiche e quelle membro è che le funzioni membro hanno sempre il puntatore del this inoltrato automaticamente.

0

semplicemente se si fa riferimento, le funzioni statiche creano un singolo set di memoria per se stesso e sono pensate per i membri di dati statici che in genere non sono modificabili. Ma le funzioni non statiche creano un set separato di memorie per ogni istanza e sono pensate sia per membri di dati statici che non statici. Se hai bisogno di un output stabile, vai per statico e se hai bisogno di un alternate vai per il non-statico.

Problemi correlati