Plain old data structure
||This article includes a list of references, related reading or external links, but its sources remain unclear because it lacks inline citations. (March 2013)|
||This article should be divided into sections by topic, to make it more accessible. (March 2013)|
Plain old data structures are appropriate when there is a part of a system where it should be clearly indicated that the detailed logic for data manipulation and integrity are elsewhere. PODs are often found at the boundaries of a system, where information is being moved to and from other systems or persistent storage and the problem domain logic that is found in other parts of the system is not relevant. For example, PODs would be convenient for representing the field values of objects that are being constructed from external data, in a part of the system where the semantic checks and interpretations needed for valid objects have not yet been applied.
A POD type in C++ is defined as either a scalar type or a POD class. A POD class has no user-defined copy assignment operator, no user-defined destructor, and no non-static data members that are not themselves PODs. Moreover, a POD class must be an aggregate, meaning it has no user-declared constructors, no private nor protected non-static data, no base classes and no virtual functions. The standard includes statements about how PODs must behave in C++.
In certain contexts, C++ allows only POD types to be used. For example, a union in C++98 cannot contain a class that has virtual functions or nontrivial constructors or destructors. This restriction is imposed because the compiler cannot determine which constructor or destructor should be called for a union. POD types can also be used for interfacing with C, which supports only PODs.
In Java, some developers consider that the POD concept corresponds to a class with public data members and no methods (Java Code Conventions 10.1), i.e., a data transfer object. Others would also include POJOs (a class that has methods but only getters and setters, with no logic) and Java Beans to fall under the POD concept if they do not use event handling and do not implement additional methods beyond getters and setters. However, POJOs and Java Beans do have encapsulation and so violate the fundamental definition of POD.
- Information Technology Industry Council (2003-10-15). Programming languages — C++ (Second edition ed.). Geneva: ISO/IEC. 14882:2003(E).
- "C++ Language Note: POD Types", by Walter E. Brown, Fermi National Accelerator Laboratory, September 29, 1999; last updated November 29, 1999.
- "Java Language Data Structures", Sun/Oracle Code Conventions from April 20, 1999.