BUG: Constructor Gets Called Multiple Times on the Same ObjectLast reviewed: July 24, 1997Article ID: Q152211 |
The information in this article applies to:
SYMPTOMSThe constructor gets called more than once on the same global object.
CAUSEThis error occurs when a file has both a global object and a function that references the global object as extern. In this case, the compiler incorrectly generates code that calls the constructor on the "extern myClass object;" statement.
RESOLUTIONRemove the line that contains extern reference to the global. You can safely remove this line since the global is in file scope. -or- Create two separate files, one that contains the global object, and one that contains the function that references the global object as extern.
STATUSMicrosoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. We are researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available.
MORE INFORMATION
Sample Code
// This sample demonstrates the problem of the constructor getting // called twice. /* Compile options needed: cl test.cpp */ // TEST.CPP // ======== #include "stdio.h" class myClass { public: myClass() {printf("myClass Constructor called\n");}; void test() {printf("test() called\n");}; } object; void main() { // Remove the next line for the first workaround: extern myClass object; object.test(); } // sample output: (without extern line removed) myClass Constructor called myClass Constructor called test() called // This sample demonstrates the workaround that causes the program // to only call the constructor once. /* Compile options needed: cl Test2A.cpp Test2B.cpp */ // Test2.h // ======== #include "stdio.h" class myClass { public: myClass() {printf("myClass Constructor called\n");}; void test() {printf("test() called\n");}; }; // Test2A.cpp // ========== #include "Test2.h" myClass object; // Test2B.cpp // ========== #include "Test2.h" void main() { extern myClass object; object.test(); } // sample output: myClass Constructor called test() called |
Additional query words: 10.10 10.20
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |