m***n 发帖数: 2154 | 1 MyStr::MyStr(const MyStr& original)
{
p = new char[original.size+1];
memcpy(p, original.data, original.size);
p[original.size] = '\0';
}
char* data;
int size;
谢谢。更新了一下 ,还有问题么?
更新了成员变量。 |
w****x 发帖数: 2483 | 2
p.size??p.data??这个是C++吗, 啥啊
【在 m***n 的大作中提到】 : MyStr::MyStr(const MyStr& original) : { : p = new char[original.size+1]; : memcpy(p, original.data, original.size); : p[original.size] = '\0'; : } : char* data; : int size; : 谢谢。更新了一下 ,还有问题么? : 更新了成员变量。
|
m***n 发帖数: 2154 | 3 重新写了一下。
【在 w****x 的大作中提到】 : : p.size??p.data??这个是C++吗, 啥啊
|
l*****a 发帖数: 14598 | 4 waht is p?
why not use this->data or data
【在 m***n 的大作中提到】 : MyStr::MyStr(const MyStr& original) : { : p = new char[original.size+1]; : memcpy(p, original.data, original.size); : p[original.size] = '\0'; : } : char* data; : int size; : 谢谢。更新了一下 ,还有问题么? : 更新了成员变量。
|
m***n 发帖数: 2154 | 5 just assume it is data. what's the problem with the code ?
【在 l*****a 的大作中提到】 : waht is p? : why not use this->data or data
|
R***Z 发帖数: 1167 | 6 p[original.size+1] = '\0'越界了吧?应该是p[original.size]= '\0'
【在 m***n 的大作中提到】 : MyStr::MyStr(const MyStr& original) : { : p = new char[original.size+1]; : memcpy(p, original.data, original.size); : p[original.size] = '\0'; : } : char* data; : int size; : 谢谢。更新了一下 ,还有问题么? : 更新了成员变量。
|
l*****a 发帖数: 14598 | 7 BTW, p[original.size]='\0';
【在 m***n 的大作中提到】 : MyStr::MyStr(const MyStr& original) : { : p = new char[original.size+1]; : memcpy(p, original.data, original.size); : p[original.size] = '\0'; : } : char* data; : int size; : 谢谢。更新了一下 ,还有问题么? : 更新了成员变量。
|
c*****n 发帖数: 96 | 8 MyStr::MyStr(const MyStr& original)
{
p = new char[original.size+1];
memcpy(p, original.data, original.size);
==> p[original.size+1] = '\0';
}
There is a buffer overflow issue. Should be p[original.size] = '\0' |
m***n 发帖数: 2154 | 9 这个是我写错了,原题是orignal size的。。
【在 c*****n 的大作中提到】 : MyStr::MyStr(const MyStr& original) : { : p = new char[original.size+1]; : memcpy(p, original.data, original.size); : ==> p[original.size+1] = '\0'; : } : There is a buffer overflow issue. Should be p[original.size] = '\0'
|
w****x 发帖数: 2483 | 10
p每检测NULL
【在 m***n 的大作中提到】 : 这个是我写错了,原题是orignal size的。。
|
|
|
m***n 发帖数: 2154 | 11 引用cannot be null ?
【在 w****x 的大作中提到】 : : p每检测NULL
|
l******d 发帖数: 530 | 12 p, origin.data是不是都要检测null?MyStr的成员定义有没有列出来? |
y********g 发帖数: 8 | |
l*********8 发帖数: 4642 | 14 class MyStr {
MyStr() : data(NULL), size(0)
{
}
MyStr(const MyStr& original) : data(NULL), size(0)
{
p = new char[original.size+1];
if (!p || !(original.data))
throw exception;
memcpy(p, original.data, original.size);
p[original.size] = '\0';
data = p;
size = original.size;
}
private:
char* data;
int size;
}
【在 m***n 的大作中提到】 : MyStr::MyStr(const MyStr& original) : { : p = new char[original.size+1]; : memcpy(p, original.data, original.size); : p[original.size] = '\0'; : } : char* data; : int size; : 谢谢。更新了一下 ,还有问题么? : 更新了成员变量。
|
l*****a 发帖数: 14598 | 15 where does p come from?
why need member initialization list for copy constructor?
why origianl.data can't be null?
【在 l*********8 的大作中提到】 : class MyStr { : MyStr() : data(NULL), size(0) : { : } : MyStr(const MyStr& original) : data(NULL), size(0) : { : p = new char[original.size+1]; : if (!p || !(original.data)) : throw exception; : memcpy(p, original.data, original.size);
|
l*********8 发帖数: 4642 | 16 Thank you for the comments.
【在 l*****a 的大作中提到】 : where does p come from? : why need member initialization list for copy constructor? : why origianl.data can't be null?
|
l*********8 发帖数: 4642 | 17 Thank you for the comments.
I modified my code. But I still like the initialization list :-)
class MyStr {
MyStr() : data(NULL), size(0)
{
}
~MyStr()
{
if (data != NULL)
delete [] data;
}
MyStr(const MyStr& original) : data(NULL), size(0)
{
data = new char[original.size+1];
if(original.data == NULL)
return;
memcpy(data, original.data, original.size);
data[original.size] = '\0';
size = original.size;
}
private:
char* data;
int size;
}
【在 l*****a 的大作中提到】 : where does p come from? : why need member initialization list for copy constructor? : why origianl.data can't be null?
|
l*****a 发帖数: 14598 | 18 你为什么要保留没有意义的code?
btw, if u really want to keep them,
I suggest u just keep
MyStr(const MyStr& original) : size(original.size)
【在 l*********8 的大作中提到】 : Thank you for the comments. : I modified my code. But I still like the initialization list :-) : class MyStr { : MyStr() : data(NULL), size(0) : { : } : ~MyStr() : { : if (data != NULL) : delete [] data;
|
l*********8 发帖数: 4642 | 19 MyStr(const MyStr& original)
{
if(original.data == NULL) {
data = NULL;
size = 0;
return;
}
data = new char[original.size+1];
memcpy(data, original.data, original.size);
data[original.size] = '\0';
size = original.size;
}
【在 l*****a 的大作中提到】 : 你为什么要保留没有意义的code? : btw, if u really want to keep them, : I suggest u just keep : MyStr(const MyStr& original) : size(original.size)
|
l*********8 发帖数: 4642 | 20 不太理解。
copy constructor是用在下面两种情况:
MyClass A(B); // B is a MyClass object
MyClass A = B;
为什么要判断参数是否就是自身呢?为什么要return呢?
你说的是operator = ? |
d*****y 发帖数: 205 | 21 sorry,我看成 是assignment了(A=B),抱歉
【在 l*********8 的大作中提到】 : 不太理解。 : copy constructor是用在下面两种情况: : MyClass A(B); // B is a MyClass object : MyClass A = B; : 为什么要判断参数是否就是自身呢?为什么要return呢? : 你说的是operator = ?
|