首页 > 解决方案 > 如何发送对象c ++的克隆

问题描述

所以我有一个 for 循环,所以我将一个对象发送到一个函数。我将接收到的对象的地址设置为一个指针,但这使得当我更改原始对象时,指向它的对象的地址也发生了变化,我不希望这样。是否可以在 C++ 中为我发送的对象执行 .clone() ?

标签: c++

解决方案


如果您的“发送”功能适用于值,您可以按值使用对象。但是,如果“发送”与指针一起使用,或者出于其他原因需要“克隆”对象,则您可以实现复制构造函数。

这是一个简单的代码示例:

#include<iostream>

class SomeClass {
    int someData;

public:
    // Simple constructor
    SomeClass(int data) : someData(data) {}

    //Copy constructor
    SomeClass(const SomeClass& o) : someData(o.someData) {}

    void Print() {
        std::cout << someData << '\n';
    }

    void ChangeData(int data) {
        someData = data;
    }
};

void send(SomeClass* o) {
    // do something
    o->ChangeData(43);
}

int main() {
    SomeClass obj(42);
    SomeClass clonnedObj(obj);
    send(&clonnedObj);
    obj.Print();
    clonnedObj.Print();
}

输出是

42
43

推荐阅读