Declare a copy constructor and an assignment operator for classes with dynamically allocated memory
Source: Item 11 – Effective C++ – Scott Meyers
Con trỏ (pointer) trong C/C++ là một khái niệm vô cùng mạnh mẽ. Tuy nhiên nếu sử dụng chúng không cẩn thận thì chương trình sẽ phải trả giá rất đắt. Nó có thể gây crash và làm sụp đổ hệ thống. Trong bài viết này chúng ta sẽ xem xét khi chúng ta cần thể hiện một class mà có cấp phát bộ nhớ động (sử dụng pointer) thì cần chú ý những gì. Ví dụ chúng ta cần thể hiện một lớp String chẳng hạn.
// a poorly designed String class
class String
{
public:
String(const char *value);
~String();
... // no copy copy constructor or operator=
private:
char *data;
};
String::String(const char *value)
{
if (value) {
data = new char[strlen(value) + 1];
strcpy(data, value);
}
else {
data = new char[1];
*data = '';
}
}
inline String::~String() { delete [] data; }
2 comments