Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
FarStar
Заблокирован
#1

Есть ли разница между MyClass *c = new MyClass() и MyClass *c = new MyClasss; - C++

26.04.2013, 08:29. Просмотров 1334. Ответов 27
Метки нет (Все метки)

Собственно, что происходит, когда создаёшь объект класса без скобок в название после new?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2013, 08:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Есть ли разница между MyClass *c = new MyClass() и MyClass *c = new MyClasss; (C++):

Vector<MyClass> MyVector или вектор типа MyClass - C++ - C++
Допустим у меня есть код ежедневника с классом Time, тут есть проверка времени, добавление элементов вектора в конец строки и небольшая...

Отличие Myclass& от Myclass* в аргументах функции - C++
Доброго времени суток. Новичок в С++ (раньше писал на всяких питонах и пхп). Очень нравится язык, прям каждый раз, когда что-то новое...

New MyClass & GetLastError - C++
подскажите, допустим, закончилась память и при выделении для объекта myclass = new MyClass myclass будет содержать NULL, а что будет...

Как минимально просто использовать функция std::find с последовательность типа : list<myClass*> - C++
Добрый день. Как минимально просто использовать функция std::find с последовательность типа : list&lt;myClass*&gt;,если в классе перегружен...

Undefined reference to "MyClass::DEFAULT_CHANNEL_NUMBER" - C++
доброго времени суток, допустим есть класс class MyClass { static const unsigned int DEFAULT_CHANNEL_NUMBER = 0; std::map&lt;unsigned,...

friend ostream &operator<<(ostream &stream, MyClass o); - C++
Что означает данная строчка которую обычно пишут в конце класса? friend ostream &amp;operator&lt;&lt;(ostream &amp;stream, MyClass o);

27
ForEveR
В астрале
Эксперт С++
7988 / 4747 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
26.04.2013, 10:46 #16
FarStar, Это не под класс. Так что зависит от того как инициализирует конструктор.
Во всех трех случаях будет вызван конструктор без аргументов.
0
Tulosba
26.04.2013, 10:57
  #17

Не по теме:

Цитата Сообщение от vxg Посмотреть сообщение
ни о каких глюках (прям глюках) не слышал
Вот Вам тестик небольшой для начала:
C++
1
2
3
4
5
6
7
AnsiString a = "a";
AnsiString b = "b";
 
while( true )
{
   AnsiString c =  true ? AnsiString( a + b ) : AnsiString( "" ) ;
}
Понаблюдайте за памятью.

0
vxg
Модератор
3208 / 2011 / 230
Регистрация: 13.01.2012
Сообщений: 7,790
26.04.2013, 11:06 #18
Цитата Сообщение от Tulosba Посмотреть сообщение
Понаблюдайте за памятью.
и это отвратило вас от bcb ? ну, не делайте так. с тем же успехом я могу привести вам ляпы из STD

Добавлено через 2 минуты

Не по теме:

*шепотом* а вы разобрались почему оно так? например

C++
1
2
3
4
5
6
7
8
9
   AnsiString c;
   if (true)
   {
       c = AnsiString( a + b );
   }
   else
   {
       c = AnsiString( "" ) ;
   }
не имеет такого эффекта

0
Tulosba
:)
Эксперт С++
4619 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.04.2013, 11:14 #19
vxg, не только это, конечно. Но не буду же я тут все глюки вспоминать, с которыми сталкивался при работе с быдлером. Просто в очередной прекрасный момент было принято решение ничего нового на нем не создавать. Именно по причине кривизны среды.
Цитата Сообщение от vxg Посмотреть сообщение
вам ляпы из STD
Что за STD?

Добавлено через 1 минуту
Цитата Сообщение от vxg Посмотреть сообщение
а вы разобрались почему оно так?
пришлось. Но когда проект содержит несколько сотен тысяч строк, поиск таких ошибок совсем не радует.
0
FarStar
Заблокирован
26.04.2013, 11:18  [ТС] #20
Шьёрт побъери
хрен с этим наследованием
C++
1
2
3
4
5
6
7
class A
{
A();
~A();
int x;
td::vecotr<int> y;
}
C++
1
2
3
A a;
A *a=new A;
A *a=new A();
дайте чёткий ответ итить расколотить
0
ForEveR
В астрале
Эксперт С++
7988 / 4747 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
26.04.2013, 11:28 #21
FarStar, Все равно, есть user-defined конструктор, потому всегда будет вызван он. А вот какова будет инициализация в конструкторе - дело того кто его пишет.
0
FarStar
Заблокирован
26.04.2013, 11:37  [ТС] #22
Цитата Сообщение от ForEveR Посмотреть сообщение
FarStar, Все равно, есть user-defined конструктор, потому всегда будет вызван он. А вот какова будет инициализация в конструкторе - дело того кто его пишет.
Ну вот в моём примере конструкторе ничего не инициализировалось, значит всё мусор?
А если нет юзер конструктора, тогда что?
я просто пытаюсь понять, в чём разница между new A() и new A ? видел такой вопрос в одном тесте brainbrench
0
vxg
Модератор
3208 / 2011 / 230
Регистрация: 13.01.2012
Сообщений: 7,790
26.04.2013, 11:41 #23
Цитата Сообщение от Tulosba Посмотреть сообщение
быдлером
назовите на чем вы сейчас пишите, я тоже хочу назвать эту среду гамном имеющей недостатки
Цитата Сообщение от Tulosba Посмотреть сообщение
Что за STD?
ну типа std::и_все_что_тут_пишется
Цитата Сообщение от Tulosba Посмотреть сообщение
Но когда проект содержит несколько сотен тысяч строк
когда проект содержит сотни тысяч строк говонокода вдруг оказывается виноватой среда разработки... не, пример хороший, просто реально за практику работы не сталкивался с таким. делал и так и сяк (то есть пользуясь классами VCL или пользуясь std::string что мне ближе). ни разу не "попал". может "гребешок" был редкий или "чесал" в другую сторону.

Добавлено через 1 минуту
Цитата Сообщение от FarStar Посмотреть сообщение
если нет юзер конструктора, тогда что?
тогда среда сама сгенерит его. для простых полей инициализации не будет. для объектов будут вызываться констркторы по умолчанию
0
ForEveR
В астрале
Эксперт С++
7988 / 4747 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
26.04.2013, 11:43 #24
Я пожалуй, слегка был не прав, приведя цитаты из стандарта С++11. Тут слегка изменились правила. Вот из 03.
A new-expression that creates an object of type T initializes that object as follows:
— If the new-initializer is omitted:
— If T is a (possibly cv-qualified) non-POD class type (or array thereof), the object is default-
initialized (8.5). If T is a const-qualified type, the underlying class type shall have a user-declared
default constructor.
— Otherwise, the object created has indeterminate value. If T is a const-qualified type, or a (possibly
cv-qualified) POD class type (or array thereof) containing (directly or indirectly) a member of
const-qualified type, the program is ill-formed;
— If the new-initializer is of the form (), the item is value-initialized (8.5);
— If the new-initializer is of the form (expression-list) and T is a class type, the appropriate constructor is
called, using expression-list as the arguments (8.5);
— If the new-initializer is of the form (expression-list) and T is an arithmetic, enumeration, pointer, or
pointer-to-member type and expression-list comprises exactly one expression, then the object is initial-
ized to the (possibly converted) value of the expression (8.5);
— Otherwise the new-expression is ill-formed.

To zero-initialize an object of type T means:
— if T is a scalar type (3.9), the object is set to the value of 0 (zero) converted to T;
— if T is a non-union class type, each nonstatic data member and each base-class subobject is zero-
initialized;
— if T is a union type, the object’s first named data member89) is zero-initialized;
— if T is an array type, each element is zero-initialized;
— if T is a reference type, no initialization is performed.
To default-initialize an object of type T means:
— if T is a non-POD class type (clause 9), the default constructor for T is called (and the initialization is
ill-formed if T has no accessible default constructor);
— if T is an array type, each element is default-initialized;
— otherwise, the object is zero-initialized.
To value-initialize an object of type T means:
— if T is a class type (clause 9) with a user-declared constructor (12.1), then the default constructor for T is
called (and the initialization is ill-formed if T has no accessible default constructor);
— if T is a non-union class type without a user-declared constructor, then every non-static data member
and base-class component of T is value-initialized;
— if T is an array type, then each element is value-initialized;
— otherwise, the object is zero-initialized

Scalar types, POD-struct types,
POD-union types (clause 9), arrays of such types and cv-qualified versions of these types (3.9.3) are collec-
tively called POD types.

A POD-struct is an aggregate class that has no non-static data members of type non-POD-struct,
non-POD-union (or array of such types) or reference, and has no user-defined copy assignment operator
and no user-defined destructor.
0
Tulosba
:)
Эксперт С++
4619 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.04.2013, 11:46 #25
Цитата Сообщение от vxg Посмотреть сообщение
назовите на чем вы сейчас пишите, я тоже хочу назвать эту среду гамном имеющей недостатки
Всё говно, кроме мочи. У всех есть недостатки, только кто-то их исправляет, кто-то нет, у кого-то больше, у кого-то меньше. Ну и т.д, и т.п. На текущий момент можете похаить VS2010
Цитата Сообщение от vxg Посмотреть сообщение
ну типа std::и_все_что_тут_пишется
Если Вам не сложно, создайте тему, пообсуждаем. Потому что тут это уже дикий оффтоп и холивар.
Про глюки BC6 тоже можно создать тему, но для себя я уже решил никогда к этой среде не возвращаться, поэтому переубедить меня уже нельзя
0
vxg
Модератор
3208 / 2011 / 230
Регистрация: 13.01.2012
Сообщений: 7,790
26.04.2013, 11:49 #26
Цитата Сообщение от ForEveR Посмотреть сообщение
Я пожалуй, слегка был не прав, приведя цитаты из стандарта С++11. Тут слегка изменились правила. Вот из 03.
кстати, а как будет вести себя массив?
C++
1
my_type *a = new my_type[10];
есть ли тут способ управлять конструкторами создаваемых объектов и что будет происходить если конструктор без параметров был запрещен в определении типа?
0
Tulosba
:)
Эксперт С++
4619 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.04.2013, 11:56 #27
Цитата Сообщение от vxg Посмотреть сообщение
и что будет происходить если конструктор без параметров был запрещен в определении типа?
То массив создать не получится. При создании массива вызывается конструктор по умолчанию.
0
vxg
Модератор
3208 / 2011 / 230
Регистрация: 13.01.2012
Сообщений: 7,790
26.04.2013, 12:01 #28
Цитата Сообщение от Tulosba Посмотреть сообщение
похаить VS2010
среда исторически неполноценная нагло претендующая на извращение самого лучшего на свете языка путем приписывания к нему различного рода уродских расширений (в том числе, управляемых), деградирует все сильнее с каждой новой версией, предпринимает попытки залезть в душу при помощи выпуска свободных версий и наклеивания страз, судорожно попытается быть похожей на Borland C++ Builder 6 не смотря на органическую несовместимость своего графического дизайнера со здравым смыслом (к слову сказать XE так же пытается быть похожим на VS - зачем - это вопрос), интерфейс крайне враждебен и неудобен, настройки настолько сложны (некоторые этим хвалятся наивно полагая что теперь они могут настроить каждую строчку в своей программе), что легче пересесть на Linux (причем предварительно написав ядро, компилятор и выполнив сборку на собственноручно изготовленном чипе) имеющая свои недостатки

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
То массив создать не получится. При создании массива вызывается конструктор по умолчанию.
логично. думал может чего не знаю.
0
26.04.2013, 12:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2013, 12:01
Привет! Вот еще темы с ответами:

Есть ли разница между этими записями? - C++
bool param1, param2, param3; bool param1; bool param2; bool param3;

Есть ли разница между Visual C++, Borland C++ и C++ Builder? - C++
Какая разница между этими диалектами, или незнаю как это точно называется. И какой лучше?

Есть разница между C++Builder и Visual Studio? - C++
Здравствуйте! Я только начал изучать С++ (по книге Лафоре). Хочу узнать есть ли разница в какой программе программы писать? Просто такое...

Есть ли разница между подключениями 2-х и 1-ого заголовка? - C++
Изучаю Потоковые классы в С++ и неожиданно задался вопросом. Есть ли разница между подключениями 2х заголовков &lt;istream&gt; и &lt;ostream&gt; и...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru