Форум программистов, компьютерный форум CyberForum.ru

Будет ли работать должным образом конструктор копирование с указателем? - C++

Восстановить пароль Регистрация
 
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.03.2013, 04:39     Будет ли работать должным образом конструктор копирование с указателем? #1
C++
1
2
3
4
5
class A
{
    A() {}
    A(const A *);
}
То что этот код скомпилируется - сомнений нет. Вот есть сомнения по поводу его "работоспособности".
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 284
Регистрация: 04.12.2011
Сообщений: 7,712
Записей в блоге: 3
02.03.2013, 04:57     Будет ли работать должным образом конструктор копирование с указателем? #2
Цитата Сообщение от xtorne21st Посмотреть сообщение
C++
1
2
3
4
5
class A
{
    A() {}
    A(const A *);
}
То что этот код скомпилируется - сомнений нет. Вот есть сомнения по поводу его "работоспособности".
Вопрос только в том, зачем он Вам нужен. Если нужен то и ладно.
Стандартный копирующий конструктор нужен для передачи по значению, и для возврата значения. При инициализации объекта объектом тоже. То есть, он часто неявно вызывается. Такой, конструктор принимает ссылку на экземпляр read-only.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.03.2013, 05:00  [ТС]     Будет ли работать должным образом конструктор копирование с указателем? #3
я просто побайтово копирую память для шаблона, всё компилируется а вот как проверить на работоспособность не знаю...

Добавлено через 22 секунды
С сылкой не получается... поэтому вопрос и возник.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 284
Регистрация: 04.12.2011
Сообщений: 7,712
Записей в блоге: 3
02.03.2013, 05:15     Будет ли работать должным образом конструктор копирование с указателем? #4
Цитата Сообщение от xtorne21st Посмотреть сообщение
я просто побайтово копирую память для шаблона, всё компилируется а вот как проверить на работоспособность не знаю...
Добавлено через 22 секунды
С сылкой не получается... поэтому вопрос и возник.
Как я понимаю, конструктор копий это конструктор который принимает ссылку по определению. То есть, другие конструктора могут иметь место, но если не определен копирующий, то будет использоваться по умолчанию.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.03.2013, 05:19     Будет ли работать должным образом конструктор копирование с указателем? #5
Цитата Сообщение от xtorne21st Посмотреть сообщение
С сылкой не получается... поэтому вопрос и возник.
так показывай код, который не получается. С указателем вряд ли выйдет...
просто потому что синтаксис не подходит
C++
1
2
3
4
A item;
A copied(item);//не сработает, т.к. твой конструктор ожидает указатель в качестве аргумента, а компилятор 
//без тебя не догадается, что к item надо применить оператор взятия адреса.
A copied2(&item);
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.03.2013, 05:22  [ТС]     Будет ли работать должным образом конструктор копирование с указателем? #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <cstdlib>
 
template <typename V>
class Vector
{
    public:
        Vector();
        ~Vector();
        Vector(unsigned int);
        Vector(const Vector *);
 
    private:
        V* vec_ptr;
 
        size_t vec_size;
};
 
// Стандартный деструктор
template <typename V>
Vector<V>::~Vector()
{
    if (vec_ptr)
        delete [] vec_ptr;
}
 
// Конструктор.
template <typename V>
Vector<V>::Vector()
{
    vec_ptr = NULL;
    vec_size = 0;
}
 
// Конструктор копии.
template <typename V>
Vector<V>::Vector(const Vector* obj)
{
    if (vec_ptr) 
        delete [] vec_ptr;
 
    vec_size = obj.vec_size;
    vec_ptr = new V[vec_size];
    
    char* t = reinterpret_cast<char*>(vec_ptr);
    const char* f = reinterpret_cast<const char*>(obj);
    for (int i = 0; i < sizeof(V) * vec_size; ++i)
        t[i] = f[i];
}
 
// Констуктор.
template <typename V>
Vector<V>::Vector(size_t size)
{
    vec_ptr = new V[size];
    vec_size = size;
}
 
int main()
{
}
Возможности проверить пока нет на работоспособность...
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.03.2013, 05:37     Будет ли работать должным образом конструктор копирование с указателем? #7
Зачем тебе вообще этот конструктор??? http://ic.pics.livejournal.com/staff...2_original.jpg
Нужен указатель на копию?
C++
1
2
3
4
Vector(const Vector& copy){
  Vector* essential_ptr=&copy;
//...
}
Цитата Сообщение от xtorne21st Посмотреть сообщение
Возможности проверить пока нет на работоспособность...
а что там проверять то?Не работает!
C++
1
2
3
4
5
int main()
{
    Vector<int> a;
    Vector<int> b(a);
}
Добавлено через 4 минуты
Цитата Сообщение от xtorne21st Посмотреть сообщение
vec_size = obj.vec_size;
obj Это УКАЗАТЕЛЬ!!! Оператор точка применять бессмысленно.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.03.2013, 14:52  [ТС]     Будет ли работать должным образом конструктор копирование с указателем? #8
Да писал ночью... тупил...
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.03.2013, 16:14     Будет ли работать должным образом конструктор копирование с указателем? #9
Цитата Сообщение от xtorne21st Посмотреть сообщение
Будет ли работать должным образом конструктор копирование с указателем?
конструктор который принимает указатель - это не конструктор копирования, это просто конструктор с параметром

Добавлено через 3 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
Стандартный копирующий конструктор нужен для передачи по значению, и для возврата значения. При инициализации объекта объектом тоже. То есть, он часто неявно вызывается. Такой, конструктор принимает ссылку на экземпляр read-only.
все верно, толко необязательно read-only
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 284
Регистрация: 04.12.2011
Сообщений: 7,712
Записей в блоге: 3
02.03.2013, 16:20     Будет ли работать должным образом конструктор копирование с указателем? #10
Цитата Сообщение от Jupiter Посмотреть сообщение
все верно, толко необязательно read-only
Обявление в формальном параметре делают const& и это не значит конечно, что сам экземпляр в коде обязательно должен быть объявлен const. А вообще, вектор и сам по себе шаблон. Копироваться умеет. Но для типов которые передаются в вектор, конструктор копии должен быть правильный. Как и др. методы, если библиотеку обобщенных алгоритмов использовать потом.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.03.2013, 16:24     Будет ли работать должным образом конструктор копирование с указателем? #11
Цитата Сообщение от IGPIGP Посмотреть сообщение
Обявление в формальном параметре делают const&
именно формальный параметр необязан быть read-only
A non-template constructor for class X is a copy constructor if its first parameter is of type X&, const X&,
volatile X& or const volatile X&
, and either there are no other parameters or else all other parameters
have default arguments (8.3.6). [ Example: X::X(const X&) and X::X(X&,int=1) are copy constructors.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 284
Регистрация: 04.12.2011
Сообщений: 7,712
Записей в блоге: 3
02.03.2013, 16:29     Будет ли работать должным образом конструктор копирование с указателем? #12
Цитата Сообщение от Jupiter Посмотреть сообщение
именно формальный параметр необязан быть read-only
Стандарт - могучая вещь. Жаль, что в литературе это часто упрощают. Хотелось бы увидеть пример, где при копировании нет другого выхода как, одновременно, модифицировать и оригинал одним махом. Ведь всё можно сделать и порознь. Или нет?
И еще вопрос. Если объявлены оба, то будет ли это перегрузкой и какой будет вызываться неявно?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.03.2013, 16:33     Будет ли работать должным образом конструктор копирование с указателем? #13
Цитата Сообщение от IGPIGP Посмотреть сообщение
Стандарт - могучая вещь. Жаль, что в литературе это часто упрощают. Хотелось бы увидеть пример, где при копировании нет другого выхода как, одновременно, модифицировать и оригинал одним махом. Ведь всё можно сделать и порознь. Или нет?
может есть какие-то схемы, когда объект хранит счётчик своих копий или какую-то ещё инфу о копиях... или запрет на создание копий константных объектов... не знаю зачем это может быть надо, впрочем.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.03.2013, 16:39     Будет ли работать должным образом конструктор копирование с указателем? #14
например ну очень плохой deprecated std::auto_ptr
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 284
Регистрация: 04.12.2011
Сообщений: 7,712
Записей в блоге: 3
02.03.2013, 16:41     Будет ли работать должным образом конструктор копирование с указателем? #15
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
может есть какие-то схемы, когда объект хранит счётчик своих копий или какую-то ещё инфу о копиях... или запрет на создание копий константных объектов... не знаю зачем это может быть надо, впрочем.
Как я понимаю, копирующий конструктор нужен для передачи и возврата через стек. Такие вещи есть и у примитивных типов, хоть их и невидно. Локальная переменная создается и уничтожается одинаково. То есть конструктор копии обеспечивает сам механизм
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.03.2013, 16:49     Будет ли работать должным образом конструктор копирование с указателем? #16
Цитата Сообщение от IGPIGP Посмотреть сообщение
Если объявлены оба, то будет ли это перегрузкой и какой будет вызываться неявно?
http://*******/iLSlH
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2013, 17:36     Будет ли работать должным образом конструктор копирование с указателем?
Еще ссылки по теме:

C++ Что будет с указателем после использования операции delete?
В чем разница между указателем и указателем на указатель? C++
Условие цикла не работает должным образом C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 284
Регистрация: 04.12.2011
Сообщений: 7,712
Записей в блоге: 3
02.03.2013, 17:36     Будет ли работать должным образом конструктор копирование с указателем? #17
Цитата Сообщение от Jupiter Посмотреть сообщение
Получается, что разрешение перегрузки при инициализации определяется объявлением типа.
Муть написал и удалил. Не заметил ошибки.
Yandex
Объявления
02.03.2013, 17:36     Будет ли работать должным образом конструктор копирование с указателем?
Ответ Создать тему
Опции темы

Текущее время: 03:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru