При попытке использовать auto_ptr
с типом, который был объявлен с помощью прямого объявления, например:
class A;
...
std::auto_ptr<A> a;
деструктор A
не вызывается (очевидно, потому что auto_ptr
внутренне удаляет
базовый указатель и деструктор для неполного типа не может быть вызван).
Однако, тот же код работает нормально, и деструктор вызывается при использовании std :: shared_ptr
вместо std :: auto_ptr
.
package javax.swing.text;
public class Foo {
public static void main(String[] args) {
Object o = new Object();
if (o instanceof Outer.Inner) {
System.out.println("yay");
} else {
System.out.println("aww");
}
}
}
файл Outer.java
:
package javax.swing.text;
public class Outer {
class Inner {
}
}
Это работает нормально и печатает «aww», как ожидалось.
Обратите внимание, что оба файла находятся в пакете javax.swing.text
. Также обратите внимание, что Foo.java
уже был в пакете javax.swing.text
в моем исходном вопросе.
Насколько я могу судить, пакет не «запечатан». МАНИФЕСТ rt.jar
(тот, который содержит пакет javax.swing.text
) не содержит "Sealed". Команда Package.getPackage ("javax.swing.text"). IsSealed ()
возвращает false.
Таким образом, я могу экземпляр
против моего собственного внутреннего класса, но не против AbstractDocument.UndoRedoDocumentEvent
, хотя другие классы из пакета могут.
Есть идеи, почему это так?