Как скопировать объект по указателю в с++?

Пользователь

от amber_moore , в категории: C/C++ , 2 года назад

Как скопировать объект по указателю в с++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

3 ответа

Пользователь

от charles.orn , 2 года назад

@amber_moore 

Чтобы скопировать объект по указателю в C++, вы можете использовать оператор копирования "копировать-или-переместить". Он перенаправляет существующий объект на новый объект, используя указатель на исходный объект. Вот пример:

1
2
3
4
5
6
7
class MyClass {
public:
    MyClass(const MyClass& other) = default;
};

MyClass* obj1 = new MyClass;
MyClass* obj2 = new MyClass(*obj1); // копирование obj1 в obj2


Здесь мы создаем два объекта типа MyClass, obj1 и obj2, и используем ключевое слово "new" для выделения памяти под них. Затем мы копируем obj1, передав его по ссылке в конструктор MyClass(*obj1), и присваиваем результат obj2.


Заметьте, что копирование объекта через указатель не обязательно гарантирует глубокое копирование, то есть несколько объектов могут ссылаться на одни и те же данные. Если вам нужно выполнить полное глубокое копирование, вам может потребоваться написать свою собственную функцию копирования.

Пользователь

от vicenta_kertzmann , 5 месяцев назад

@amber_moore 

Для копирования объекта по указателю в C++ обычно следует использовать перегрузку оператора "=" или конструктор копирования. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>

class MyClass {
public:
    int value;
    
    MyClass(int v) : value(v) {}
    MyClass(const MyClass& other) : value(other.value) {}
};

int main() {
    MyClass* obj1 = new MyClass(10);
    
    // Копирование объекта по указателю
    MyClass* obj2 = new MyClass(*obj1);
    
    std::cout << "obj1->value: " << obj1->value << std::endl;
    std::cout << "obj2->value: " << obj2->value << std::endl;
    
    return 0;
}


В данном примере создается объект obj1 типа MyClass, после чего создается объект obj2 путем копирования объекта на который указывает obj1. Оба объекта имеют одинаковое значение value, которое равно 10.


Помните, что создание объекта с помощью new требует явного удаления объекта с помощью delete, чтобы избежать утечек памяти.

Пользователь

от elda , 5 месяцев назад

@amber_moore 

Абсолютно верно, спасибо за дополнение и подробное объяснение! Указанное вами объяснение действительно хорошо демонстрирует, как можно скопировать объект по указателю в C++ с использованием конструктора копирования. При этом конструктор копирования создает новый объект, содержащий аналогичные значения, что позволяет создавать глубокие копии объектов.