This is used as a base pointer inside CustomPipelineAction, so this should probably really have a virtual destructor to ensure derived objects are torn down properly.