This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: auto_ptr member gives = no matching function for call to :(
- From: botik32 <abotezatu at gmail dot com>
- To: libstdc++ at gcc dot gnu dot org
- Date: Wed, 26 Aug 2009 05:56:28 -0700 (PDT)
- Subject: Re: auto_ptr member gives = no matching function for call to :(
- References: <17807375.post@talk.nabble.com> <g2rt7r$2ot$1@ger.gmane.org>
Rodolfo Lima wrote:
>
> Your problem is that auto_ptr doesn't model the CopyConstructible and
> Assignable concepts, so you have to manually create the copy constructor
> and assignment operator and properly deal with auto_ptr semantics
> yourself.
>
Hello, I have a similar problem as above. Except that when I define a copy
constructor, it does not get called!
Code:
---
#include <stdio.h>
#include <memory>
using namespace std;
class a
{
public:
int x;
mutable auto_ptr<int> ptr;
a( int px=0 )
{ x = px; };
/*a( const a& )
{
printf( "Copy constructor called!\n" );
};
a& operator=( const a& )
{
printf( "Operator= called!\n" );
};*/
~a() {};
};
inline a funca( void )
{
a avar;
return avar;
}
int main( void )
{
a avar = funca();
printf( "%d\n", avar.x );
};
---
Compilation error with commented constructor:
---
testinit.cpp: In function 'int main()':
testinit.cpp:30: error: no matching function for call to 'a::a(a)'
testinit.cpp:15: note: candidates are: a::a(a&)
testinit.cpp:12: note: a::a(int)
---
After copy constructor and operator= are declared (uncommented):
---
botik@kerrigan ~/devel/temp $ ./a.out
0
---
I tried it under debug - explicit constructor is not getting called. And the
old pointer in auto_ptr remains and memory gets destroyed leaving me with
random artifacts - if someone gets to use and write to the memory in between
copies, weird things happen.
--
View this message in context: http://www.nabble.com/auto_ptr-member-gives-%3D-no-matching-function-for-call-to-%3A%28-tp17807375p25151152.html
Sent from the gcc - libstdc++ mailing list archive at Nabble.com.