protected void trimConstructorDestructorLists(List<RecoveredClass> recoveredClasses,
			List<Address> vftables) throws CancelledException {

		if (recoveredClasses.isEmpty()) {
			return;
		}

		for (RecoveredClass recoveredClass : recoveredClasses) {

			monitor.checkCancelled();

			List<Function> constructorOrDestructorFunctions =
				recoveredClass.getConstructorOrDestructorFunctions();

			if (constructorOrDestructorFunctions.isEmpty()) {
				continue;
			}

			Iterator<Function> cdFunctionIterator = constructorOrDestructorFunctions.iterator();
			while (cdFunctionIterator.hasNext()) {

				monitor.checkCancelled();

				Function cdFunction = cdFunctionIterator.next();

				if (!getAllVfunctions(vftables).contains(cdFunction)) {
					continue;
				}

				// straight cd function will not also be a vfunction so remove it from the given 
				// class cd lists
				cdFunctionIterator.remove();
				recoveredClass.removeIndeterminateConstructorOrDestructor(cdFunction);
			}
		}

	}
Remove functions that are on both vfunction and cd list from the cd lists and add the rest to
a more restrictive list
@param recoveredClasses List of RecoveredClass objects
@param vftables A list of vftables in program
@throws CancelledException if cancelled
Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RecoveredClassHelper.java