All those codes are valid when performing a debug build, do you think so? Does they work like: 1.Define "new" by "DEBUG_NEW" when detecting the building mode is debug Is that to say, "new" will always be replaced with "DEBUG_NEW", I think, DEBUG_NEW maybe contains some extra error checking codes, isn't it? 2.#undef THIS_FILE. Is it to avoid conflicting with the later same name or THIS_FILE is something to be used in a release build and it can't be used in a debug build? 3.why use "THIS_FILE[]" to substitute "THIS_FILE", can we use "THIS_FILE" directly? In the meantime, I have not see THIS_FILE[] used in another place