Например:
АТ>Будет ли между этими варантами разница зависит от специфических свойств конкретного типа 'B'.
АТ>Если этот тип вообще не является класс-типом или является POD-класс-типом, то разница будет. В первом случае value-initialization сведется к обнулению, а во втором никакой инициализации не будет вообще.
// Пример 1
int* p1 = new int();
int* p2 = new int;
// '*p1' содержит 0, а '*p2' содержит непредсказуемое значение
// Пример 2
struct R { double x, y; };
struct S { int i; R r; };
S* p1 = new S();
S* p2 = new S;
// 'p1->i', 'p1->r.x' и 'p1->r.y' содержат 0, а соответствующие поля '*p2' содержат непредсказуемые значения
АТ>Если это не-POD-класс-тип без явно объявленного конструктора, то в первом случае будет рекурсивно применена value-initialization к каждому подобъекту этого класса (что при этом получится — зависит о типов этих подобъектов), а в втором случае будет просто вызван неявно объявленный конструктор всего класса 'B' (что при этом получится — опять же зависит от типов подобъектов класса). В общем случае — будет разница.
// Пример 3
struct S { int i; std::string s; };
S* p1 = new S();
S* p2 = new S;
// 'p1->i' содержит 0, а 'p2->i' содержит непредсказуемое значение
// Пример 4
struct S { int i; private: int j; };
S* p1 = new S();
S* p2 = new S;
// 'p1->i' и 'p1->j' содержат 0, а соответствующие поля '*p2' содержат непредсказуемые значения
// Пример 5
struct S { std::string s1, s2; };
S* p1 = new S();
S* p2 = new S;
// Разницы нет
АТ>Если же это класс-тип с явно объявленным конструктором, то в обоих случаях просто вызовется этот конструктор. Разницы не будет.
// Пример 6
struct S { int i; std::string s; S(); };
S* p1 = new S();
S* p2 = new S;
// Разницы нет