G********7 发帖数: 256 | 1 我有一个类,里面包含一个指针,大致如下
class A
{
int a;
int* buf;
A(){a=0;buf=0}; // default constructor
A(const A& in){ // copy constructor
a=in.a;
buf=new int[a];
memcpy(buf,in.buf,sizeof(int)*a);
};
~A(){ if(buf!=0) delete[] buf;}; // destructor
};
程序里面定义了一个vector vec,然后我试图向里面insert一个object,如下
vector vec;
vec.insert(vec.begin(),obj_A); // obj_A is an object of class A
这时候就出问题了。我debug的时候发现,vector的insert函数是先给obj_A复制一个
copy,叫做obj_A_copy,然后把obj_A_copy赋值给vec[0]。当退出insert函数时,
obj_ |
t****t 发帖数: 6806 | 2 有指针的类, 99%需要定义copy constructor和op=
op=记得要检测self-assignment
vector的定义没问题的 |
t****t 发帖数: 6806 | 3 有op=就没问题
【在 G********7 的大作中提到】 : 我有一个类,里面包含一个指针,大致如下 : class A : { : int a; : int* buf; : A(){a=0;buf=0}; // default constructor : A(const A& in){ // copy constructor : a=in.a; : buf=new int[a]; : memcpy(buf,in.buf,sizeof(int)*a);
|
G********7 发帖数: 256 | 4 恩,明白了,谢谢!
【在 t****t 的大作中提到】 : 有op=就没问题
|
k**f 发帖数: 372 | |
T*****9 发帖数: 2484 | 6 push_back 的参数类型是const T&吧
more
a |
b***y 发帖数: 2799 | 7 定义了copy ctor, 一般也要定义operator =和default ctor. 这是一般规律。
【在 G********7 的大作中提到】 : 我有一个类,里面包含一个指针,大致如下 : class A : { : int a; : int* buf; : A(){a=0;buf=0}; // default constructor : A(const A& in){ // copy constructor : a=in.a; : buf=new int[a]; : memcpy(buf,in.buf,sizeof(int)*a);
|