Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
varning C28651: Statisk initiering orsakar kopiering på skrivsidor på grund av medlemsfunktionspekare
Statiska initierare av globala eller statiska const-variabler kan ofta utvärderas fullständigt vid kompileringstillfället, vilket genereras i RDATA. Men om någon initialiserare är en pekar-till-medlem-funktion där det är en icke-statisk funktion, kan hela initieraren placeras på sidor med kopiering på skrivning, vilket har en prestandakostnad.
För binärfiler som kräver snabb inläsning och minimering av kopiering på skrivsidor bör du se till att alla funktionspekare i den statiska initieraren inte är pekar-till-medlem-funktioner. Om en pekar-till-medlem-funktion krävs skriver du en enkel statisk medlemsfunktion som omsluter ett anrop till den faktiska medlemsfunktionen.
exempel
Följande kodexempel genererar det här felet.
void Func()
{
WCHAR*pszBuf=newWCHAR[MAX_PATH];
DPA_InsertPtr(_hdpa, DA_LAST, pszBuf);
}
void CleanupDPA()
{
int count = DPA_GetCount(_hdpa);
for (int i = 0; i < count; i++)
{
delete [] (LPWSTR)DPA_GetPtr(_hdpa, i);
}
}
Följande kodexempel undviker det här felet.
class MyClass
{
...
bool memberFunc();
static bool memberFuncWrap(MyClass *thisPtr)
{ return thisPtr->memberFunc(); }
...
};
const StructType MyStruct[] = {
...
&MyClass::memberFuncWrap,
...
};