请写一个构造函数含有指针、析构函数、深拷贝的例子
时间: 2023-07-10 11:03:55 浏览: 97
构造一个对象的副本——深拷贝-析构函数和拷贝构造函数
好的,以下是一个包含指针、析构函数和深拷贝的示例类:
```cpp
#include <iostream>
class MyClass {
public:
MyClass() {
std::cout << "Constructor called" << std::endl;
data = new int(0);
}
~MyClass() {
std::cout << "Destructor called" << std::endl;
delete data;
}
// 深拷贝构造函数
MyClass(const MyClass& other) {
std::cout << "Copy constructor called" << std::endl;
data = new int(*other.data);
}
// 深拷贝赋值运算符
MyClass& operator=(const MyClass& other) {
std::cout << "Assignment operator called" << std::endl;
if (this != &other) {
delete data;
data = new int(*other.data);
}
return *this;
}
private:
int* data;
};
int main() {
MyClass obj1; // 调用构造函数
MyClass obj2 = obj1; // 调用深拷贝构造函数
MyClass obj3; // 调用构造函数
obj3 = obj1; // 调用深拷贝赋值运算符
return 0;
}
```
在上面的示例中,我们定义了一个名为`MyClass`的类,其中包含了一个指向整数的指针`data`。构造函数用于初始化`data`指针,析构函数用于释放`data`指针所指向的内存空间。
此外,我们还定义了深拷贝构造函数和深拷贝赋值运算符,以确保在拷贝或赋值对象时,不会共享指针所指向的内存空间,而是创建一个新的内存空间,并将其复制给新对象。
在`main`函数中,我们创建了三个`MyClass`对象,分别调用了构造函数、深拷贝构造函数和深拷贝赋值运算符。当这些对象超出作用域时,析构函数将被自动调用,释放内存空间。
阅读全文