当前位置:首页 C++ > 正文

深拷贝c++函数

作者:野牛程序员:2023-07-21 08:19:45 C++阅读 2680

在C++中,深拷贝(deep copy)是指创建一个新对象,并将原始对象中的所有内容复制到新对象中,而不是简单地复制指针或引用。这样可以确保原始对象和新对象在内存中完全独立,互不影响。

为了实现深拷贝,你可以通过自定义拷贝构造函数和赋值运算符重载来确保对象的深拷贝。以下是一个示例类,演示如何实现深拷贝:

#include <iostream>
#include <cstring> // For C-style string manipulation

class MyClass {
private:
    int* data;
    int size;

public:
    // Constructor
    MyClass(int s) : size(s) {
        data = new int[size];
    }

    // Destructor
    ~MyClass() {
        delete[] data;
    }

    // Copy Constructor for Deep Copy
    MyClass(const MyClass& other) : size(other.size) {
        data = new int[size];
        // Perform deep copy of the data
        std::memcpy(data, other.data, size * sizeof(int));
    }

    // Assignment Operator Overloading for Deep Copy
    MyClass& operator=(const MyClass& other) {
        if (this != &other) {
            // Free existing memory
            delete[] data;

            // Perform deep copy of the data
            size = other.size;
            data = new int[size];
            std::memcpy(data, other.data, size * sizeof(int));
        }
        return *this;
    }

    // A simple function to set values in the data array
    void setData(int index, int value) {
        data[index] = value;
    }

    // A function to display data
    void displayData() {
        for (int i = 0; i < size; ++i) {
            std::cout << data[i] << " ";
        }
        std::cout << std::endl;
    }
};

int main() {
    // Create an object and set data
    MyClass obj1(5);
    obj1.setData(0, 10);
    obj1.setData(1, 20);
    obj1.setData(2, 30);
    obj1.setData(3, 40);
    obj1.setData(4, 50);

    // Create a new object using the copy constructor (Deep Copy)
    MyClass obj2 = obj1;

    // Modify the data of the new object
    obj2.setData(2, 100);

    // Display data for both objects
    std::cout << "Object 1: ";
    obj1.displayData();

    std::cout << "Object 2: ";
    obj2.displayData();

    return 0;
}

在这个示例中,通过自定义拷贝构造函数和赋值运算符来实现深拷贝。注意在拷贝构造函数和赋值运算符中,使用memcpy函数来复制原始对象的数据,这确保了对象中的数据在内存中是独立的,而不是简单地复制指针。

野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击