Portál AbcLinuxu, 30. dubna 2025 16:48
Zajímalo by mě proč je kontrukce
public class Trida {
private long nativniData; // v nativniData je nějaký Cčkový ukazatel
}
špatně. V rámci metody disposeNative()
se pak nativniData korektně uvolní z paměti.
Stejně tak nerozumím tomu, proč by metoda finalize
neměla být nativní? S předpokladem, že nativní finalize
volá finalize
předka ve svém závěru.
Předem díky za vysvětlení.
V rámci metody disposeNative() se pak nativniData korektně uvolní z paměti.Jde o principiání nekorektnost. Ukazatale jsou a vždy budou jen 64bitové, že tam dáváte long? To kolem finalize bych považoval za best practice. Jde spíš o praktičnost. Pokud by bylo finalize nativní a vy byste potřeboval najednou uzavírat nějaký soubor, tak byste to musel udělat přidáním volání close() do nativního kódu (což je zbytečně složité). Tak je lepší si to rovnou oddělit.
Už rozumím. Jde o to, že není nikde definováno, že sizeof(void*) < sizeof(long).
Já bych se asi místo vytváření mapy (= výkonostní zabiják) spíše přikláněl,k využití nativní třídy CPointer, která má pointer peer
deklarovaný jako
public abstract class CPointer {
protected long peer;
...
}
A kruci, zase long
.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.