LINUX.ORG.RU

Приватный конструктор и статический член класса.

 ,


1

3

Здравствуйте, подскажите, как объяснить вызов приватного конструктора в таком коде:

#include <cstdlib>
#include <cstdio>

class A {
    A() 
    {
	fprintf(stdout, "private c-tor\n");
    }

    static A prototype;
};

A A::prototype = A{};

int main(int argc, char* argv[])
{
    return EXIT_SUCCESS;
}
$ ./a.out 
private c-tor

Приватный конструктор доступен только класса и его членов. prototype является частью класса.

anonymous ()

Какой компилятор? По идее вызываться не должен.

DELIRIUM ★★★★★ ()

Статический член — член класса. Члены класса (как данные так и методы) имеют доступ ко всему, включая всё приватное. Код инициализатора имеет уровень доступа того, что он инициализирует.

xaizek ★★★★★ ()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от DELIRIUM
$ g++ --version
g++ (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
$ clang --version
Ubuntu clang version 3.4-1ubuntu3
voxel_grot ()
A A::prototype = A{};
//            |    |
//            +----+--- это лишнее
quoob ()
Ответ на: комментарий от voxel_grot

Я не прав был. У тебя конструктор должен вызваться, ты явно его дёргаешь при инициализации. Без этой строчки:

A A::prototype = A{};

по идее не должен, и вызовется только при первом использовании объекта.

DELIRIUM ★★★★★ ()
Ответ на: комментарий от DELIRIUM

Вроде бы наоборот.
Раз это статический член класса и он находится в скоупе класса, то будет сконструирован до вызова main().

voxel_grot ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.