/******************************************************************************* * Copyright (c) 2015, 2016 Google, Inc and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Stefan Xenos (Google) - Initial implementation *******************************************************************************/ package org.eclipse.jdt.internal.core.nd; /** * This mix-in interface is implemented by database objects that require a custom * destruction step. */ public interface IDestructable { /** * Intended to be implemented by objects which require a custom destruction step. * This should normally not be invoked by clients, since custom destruction is just * one step in tearing down an object. The normal way to tear down an object is * {@link NdNode#delete} * <p> * If you are writing code that must run as part of delete (or are implementing part * of the destruct method on a custom ITypeFactory)the correct steps to destructing * an object are: * <ul> * <li>Invoke this destruct method (which serves the same purpose as the user-implemented * portion of a C++ destructor)</li> * <li>Invoke ITypeFactory.destructFields to destruct its fields (which serves the same * purpose as the compiler-implemented portion of a C++ destructor)</li> * <li>Invoke Database.free on its address to free up memory allocated for the object * itself. (Which serves the same purpose as the memory deallocation step in * the C++ delete operator)</li> * </ul> * <p> * Normally, first two steps are performed together as part of ITypeFactory.destruct */ void destruct(); }