реклама на сайте
подробности

 
 
> WinAVR создаёт два экземпляра конструктора
Vova75
сообщение Jun 4 2009, 20:33
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 11-08-08
Из: г. Тверь
Пользователь №: 39 554



Всем привет !

Случайно заметил в листинге два экземпляра конструктора.
Для конструктора класса "T_PID" в листинге сpp-файла обнаружилось две функции:
_ZN5T_PIDC2Effff
_ZN5T_PIDC1Effff

Причём по содержанию они идентичны.
В дизасемблере (.lss) присутствуют обе функции, а используется "_ZN5T_PIDC1Effff".

Зачем нужен второй экземпляр ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kurtis
сообщение Jun 5 2009, 06:17
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Возможно проблема в том что в С++, лаже если вы не обьявили их явно, создается как минимум конструктор по умолчанию(без параметров), конструктор копирования, деструктор и оператор присваивания.
Оптимизация включена?
Приведите на всякий случай описание класса.
Go to the top of the page
 
+Quote Post
Vova75
сообщение Jun 5 2009, 23:16
Сообщение #3





Группа: Участник
Сообщений: 10
Регистрация: 11-08-08
Из: г. Тверь
Пользователь №: 39 554



Цитата(kurtis @ Jun 5 2009, 10:17) *
Возможно проблема в том что в С++, лаже если вы не обьявили их явно, создается как минимум конструктор по умолчанию(без параметров), конструктор копирования, деструктор и оператор присваивания.
Оптимизация включена?
Приведите на всякий случай описание класса.


Нет, это не дефолтный конструктор.
Обе экземпляра абсолютно идентичны, кроме названия.
Оптимизация на это не влияет.

Вот простейший тест:
Код
В h-файле:

class   T_PID {
        int _p, _i, _d;
public:
        T_PID (int  p, int  i, int  d);
};


В cpp-файле:

#include    "pid.h"
T_PID::T_PID (int p, int i, int d)  : _p(p), _i(i), _d(d)  {}


на выходе:

   1                       .file    "pid.cpp"
   2                   __SREG__ = 0x3f
   3                   __SP_H__ = 0x3e
   4                   __SP_L__ = 0x3d
   5                   __CCP__  = 0x34
   6                   __tmp_reg__ = 0
   7                   __zero_reg__ = 1
   8                       .section    .text._ZN5T_PIDC2Eiii,"ax",@progbits
   9                   .global    _ZN5T_PIDC2Eiii
  11                   _ZN5T_PIDC2Eiii:
  12                   /* prologue: function */
  13                   /* frame size = 0 */
  14 0000 FC01              movw r30,r24
  15 0002 7183              std Z+1,r23
  16 0004 6083              st Z,r22
  17 0006 5383              std Z+3,r21
  18 0008 4283              std Z+2,r20
  19 000a 3583              std Z+5,r19
  20 000c 2483              std Z+4,r18
  21                   /* epilogue start */
  22 000e 0895              ret
  24                       .section    .text._ZN5T_PIDC1Eiii,"ax",@progbits
  25                   .global    _ZN5T_PIDC1Eiii
  27                   _ZN5T_PIDC1Eiii:
  28                   /* prologue: function */
  29                   /* frame size = 0 */
  30 0000 FC01              movw r30,r24
  31 0002 7183              std Z+1,r23
  32 0004 6083              st Z,r22
  33 0006 5383              std Z+3,r21
  34 0008 4283              std Z+2,r20
  35 000a 3583              std Z+5,r19
  36 000c 2483              std Z+4,r18
  37                   /* epilogue start */
  38 000e 0895              ret

DEFINED SYMBOLS
                            *ABS*:00000000 pid.cpp
C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:2      *ABS*:0000003f __SREG__
C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:3      *ABS*:0000003e __SP_H__
C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:4      *ABS*:0000003d __SP_L__
C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:5      *ABS*:00000034 __CCP__
C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:6      *ABS*:00000000 __tmp_reg__
C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:7      *ABS*:00000001 __zero_reg__
C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:11     .text._ZN5T_PIDC2Eiii:00000000 _ZN5T_PIDC2Eiii
C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:27     .text._ZN5T_PIDC1Eiii:00000000 _ZN5T_PIDC1Eiii

NO UNDEFINED SYMBOLS


Присутствуют две идентичные функции:
_ZN5T_PIDC1Eiii
_ZN5T_PIDC2Eiii
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 10:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01402 секунд с 7
ELECTRONIX ©2004-2016