FIX: Private Copy Constructor Called Without Proper Access (115521)



The information in this article applies to:

  • Microsoft C/C++ for MS-DOS 7.0
  • Microsoft Visual C++ 1.0
  • Microsoft Visual C++ 1.5
  • Microsoft Visual C++, 32-bit Learning Edition 4.0
  • Microsoft Visual C++, 32-bit Professional Edition 2.0
  • Microsoft Visual C++, 32-bit Professional Edition 4.0
  • Microsoft Visual C++, 32-bit Professional Edition 4.1

This article was previously published under Q115521

SYMPTOMS

After declaring the only copy constructor in a class with an access of "private", the constructor is called when access should not be allowed. For example, when an instance of the class is passed as a parameter to a function, the copy constructor is used to initialize the parameter; this should be allowed only if the function has "private" access.

STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Visual C++ version 5.0.

MORE INFORMATION

The following sample code demonstrates this problem.

Sample Code

   /* Compile options needed: none
   */ 

      #include <iostream.h>

      class aClass
      {
      private:
          int i;
          aClass(const aClass& x) { cout << "private copy constructor" <<
      endl; };

      public:
          aClass(int j) : i(j) {};
      };

      int func(aClass x) { return 0; };

      int main(void)
      {
          int n;
          aClass a(1);


          n = func(a);  //Copy constructor gets called anyway.

          return 0;
      }
				

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbbug kbCompiler kbCPPonly kbfix kbVC500fix KB115521