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

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

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

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

26.04.2013, 08:29. Просмотров 1292. Ответов 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
flerris
3 / 3 / 0
Регистрация: 17.08.2012
Сообщений: 145
26.04.2013, 09:03 #2
Цитата Сообщение от FarStar Посмотреть сообщение
Собственно, что происходит, когда создаёшь объект класса без скобок в название после new?
если со скобками то с конструктором по умолчанию, а если без, то без конструктора

Добавлено через 11 минут
Цитата Сообщение от flerris Посмотреть сообщение
если со скобками то с конструктором по умолчанию, а если без, то без конструктора
не, не так
вроде в одном случае все поля заполняются нулями а во втором нет. А у Шилдта не смотрел?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
26.04.2013, 09:21 #3
flerris, Оба варианта неверны.
Для не POD типов - вызов конструктора по умолчанию производится в любом случае.
Для POD типов - при первом варианте, будет инициализация нулем, при втором, переменная останется неинициализированной.
2
FarStar
Заблокирован
26.04.2013, 09:29  [ТС] #4
Цитата Сообщение от ForEveR Посмотреть сообщение
flerris, Оба варианта неверны.
Для не стандартных типов - вызов конструктора по умолчанию производится в любом случае.
Для стандартных - при первом варианте, будет инициализация нулем, при втором, переменная останется неинициализированной.
Что я не понял, о каких стандартных типах идёт речь, о POD? Нельзя ли крошечный пример для обоих случаев привести пожалуйста?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
26.04.2013, 09:33 #5
FarStar, Вот, отличный ответ на данный вопрос. http://stackoverflow.com/questions/6...rence-with-new
1
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,604
26.04.2013, 09:45 #6
Цитата Сообщение от ForEveR Посмотреть сообщение
при первом варианте, будет инициализация нулем,
каким нулем?

C++
1
2
3
4
5
6
7
struct my_type //POD
{
    int a;
};
 
my_type *bbb = new my_type; //в поле a хлам
my_type *ccc = new my_type(); //в поле a хлам
Добавлено через 3 минуты
...хотя codepad.org во втором случае дает ноль. сдается мне правильный ответ - делайте так что бы не рассчитывать на то чего может не быть. инициализация нулем глобальных объектов известна, а вот про динамические слышу к своему стыду впервые и как видим не везде такое поддерживается
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
26.04.2013, 09:46 #7
vxg, Вот цитата из стандарта. Если проследить путь - получается ровно то же, что и в ответе на SO.
A new-expression that creates an object of type T initializes that object as follows:
— If the new-initializer is omitted, the object is default-initialized (8.5); if no initialization is performed,
the object has indeterminate value.
— Otherwise, the new-initializer is interpreted according to the initialization rules of 8.5 for direct-
initialization.

To default-initialize an object of type T means:
— if T is a (possibly cv-qualified) 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, no initialization is performed.

The initialization that occurs in the forms
T x(a);
T x{a};
is called direct-initialization.

— If the initializer is (), the object is value-initialized.

To value-initialize an object of type T means:
— if T is a (possibly cv-qualified) class type (Clause 9) with either no default constructor (12.1) or a
default constructor that is user-provided or deleted, then the object is default-initialized;
— if T is a (possibly cv-qualified) non-union class type without a user-provided or deleted default construc-
tor, then the object is zero-initialized and, if T has a non-trivial default constructor, default-initialized;
— if T is an array type, then each element is value-initialized;
— otherwise, the object is zero-initialized.

To zero-initialize an object or reference of type T means:
— if T is a scalar type (3.9), the object is set to the value 0 (zero), taken as an integral constant expression,
converted to T;103
— if T is a (possibly cv-qualified) non-union class type, each non-static data member and each base-class
subobject is zero-initialized and padding is initialized to zero bits;
— if T is a (possibly cv-qualified) union type, the object’s first non-static named data member is zero-
initialized and padding is initialized to zero bits;
— if T is an array type, each element is zero-initialized;
— if T is a reference type, no initialization is performed.
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.04.2013, 09:52 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
struct S
{
    int v;
};
 
int main()
{
 
    S *s1 = new S;
    std::cout << s1->v << std::endl; // хлам 
 
    S *s2 = new S();
    std::cout << s2->v << std::endl; // 0 
 
    system( "pause" );
}
Добавлено через 51 секунду
Цитата Сообщение от vxg Посмотреть сообщение
как видим не везде такое поддерживается
где не поддерживается?
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,604
26.04.2013, 10:00 #9
Цитата Сообщение от ForEveR Посмотреть сообщение
Вот цитата из стандарта
только из какого именно
Цитата Сообщение от Tulosba Посмотреть сообщение
где не поддерживается?
ну конечно же мой любимый и непогрешимый самый лучший на свете borland c++ builder 6. год выпуска вроде 2002 и стандарт 98 на который ссылаются на стеке вроде должен поддерживаться... хз
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
26.04.2013, 10:03 #10
vxg, C++11. Но отличия минимальны в данном конкретном случае.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.04.2013, 10:31 #11
Цитата Сообщение от vxg Посмотреть сообщение
самый лучший на свете borland c++ builder 6
закопайте его подальше и забудьте как страшный сон.
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,604
26.04.2013, 10:33 #12
Цитата Сообщение от Tulosba Посмотреть сообщение
закопайте его подальше и забудьте как страшный сон
вы просто забыли первое правило разработчика раз даете такие советы
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.04.2013, 10:36 #13
vxg, я даю такие советы лишь потому, что не раз обжигался на глюках bcb6
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,604
26.04.2013, 10:41 #14
Цитата Сообщение от Tulosba Посмотреть сообщение
глюках bcb6
ни о каких глюках (прям глюках) не слышал. может вы не умеете его готовить?
0
FarStar
Заблокирован
26.04.2013, 10:42  [ТС] #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
class A
{
   A();
   ~A();
   int x;
   std::vecotr<int> y;
}
class B : public A
{
   B();
   ~B();
}
Так что, какое резюме, чему будут равны поля x и y в классе B при:
C++
1
2
3
B b;
B *b=new B;
B *b=new B();
?
0
26.04.2013, 10:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2013, 10:42
Привет! Вот еще темы с ответами:

Есть ли разница между этими записями? - 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; и...


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

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

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