您好,我有一个包含数组的类,我没有通过我的类构造函数传递这个数组(这里会出错吗?)该数组只是在类中定义,然后在一个read方法中初始化。
但在主要情况下,我创建了一个类的实例,如下所示:
myClass myClass1;然后执行以下操作:
myClass1 = myClass2;现在我在第一个类实例上使用冒泡排序方法,如下所示:
MyClass1.sort();现在,当我在排序后将这两个实例写出为文本时,它们都排序了吗?
我读过浅拷贝和深拷贝,但我不明白为什么在浅拷贝之后调用的方法会导致这两个拷贝都排序?这是预期的行为吗?
更多信息:
在我的类中,我只是将数组定义为:
static string myArray[5];然后在write方法中,我将5个元素写入其中,有没有更好的方法,我必须使用一个方法来初始化它。
发布于 2012-03-17 19:04:39
在我的类中,我只是将数组定义为:
静态字符串myArray5;
我是否应该在头文件中声明它,因为它只在cpp文件中声明?因为它还在复制这两个。
如果在类定义之外声明它将是一个全局变量。它将只有一个实例。您需要在类中声明它,而不是static
class MyClass1 {
// other things...
string myArray[5];
};在任何情况下,咨询a good C++ introductory book都能更好地回答这种基本问题。
发布于 2012-03-17 18:54:26
您的数组是如何定义/创建的?如果你用new创建它,并用指针引用它,你将需要一个自定义的复制构造函数来创建一个深度副本(即创建一个新的数组实例并复制它的内容)。默认的复制构造函数只执行浅层复制,因此两个实例将使用相同的内存(即两个指针指向堆上的同一数组)。
这将与默认的复制构造函数一起使用:
class myclass {
char text[256];
}这不适用于默认的复制构造函数(至少不像预期的那样):
class myclass {
char *text;
myclass() : text(new char[256]) {}
~myclass() { delete [] text; }
}定义为static的成员永远不会被复制。所有实例都共享它,不需要额外的代码:
class myclass {
static char text[256];
}第二种情况的复制构造函数可能如下所示(请注意,这是简化的,并且不检查有效值等):
myclass(const myclass &base) : text(new char[256]) { strcpy(text, base.text); }一般经验法则:我是否使用任何被赋予某个new返回值的指针成员?如果是这样的话,编写一个复制构造函数。如果没有,就使用默认的(除非你有其他原因)。
https://stackoverflow.com/questions/9749314
复制相似问题