C++ a vliv viditelnosti konstruktoru při vytváření instance

sobol

Dobrý den, založil jsem téma C++ a výjimka v destruktoru ( http://forum.root.cz/index.php?topic=8389.0 ), které se odvíjelo dál, ale mě odvedlo od pochopení správného zápisu programu v C++. Dovolil jsem si proto založit nové téma, kde bych chtěl pochopit, co se přesně dělo v mém kódu viz níže. Byl jsem upozorněn, že založit instanci např třídy A mám zapsat jako A a; - tedy nikoliv jako A a(); - Konstruktor A je totiž defaultně privátní, jak se to tedy ale mohlo vůbec v mém VS2013 přeložit? To překladač vygeneroval veřejný implicitní konstruktor? Něco jako přetížení? Celá věc se mi začala zdát divná, když konstruktory a destruktory nic nevypisovaly. Děkuju za jakoukoliv pomoc při pochopení mé chyby.

Kód: [Vybrat]
#include "stdafx.h"
#include <iostream>

using namespace std;

class A
{
A()
{
cout << "konstruktor";
}

~A()
{
cout << "destruktor";
}
};

class B
{
B()
{
cout << "konstruktor B";
}

~B()
{
cout << "destructor B";

throw new int(5);
}
};

int _tmain(int argc, _TCHAR* argv[])
{
int i = 1;
if (i=1)
{
A a();
B b();
}
/*
try
{

A a();
B b();
}
catch (...)
{
cout << "err";
}
*/
char ch[10];
cin >> ch;

return 0;
}


Jakub Galgonek

Re:C++ a vliv viditelnosti konstruktoru při vytváření instance
« Odpověď #1 kdy: 10. 02. 2014, 18:02:49 »
Byl jsem upozorněn, že založit instanci např třídy A mám zapsat jako A a; - tedy nikoliv jako A a(); - Konstruktor A je totiž defaultně privátní, jak se to tedy ale mohlo vůbec v mém VS2013 přeložit?

Jak se to mohlo přeložit? Snadno, zápis "A a();" je jen deklarace říkající "mám funkci a(), která vrací instanci třídy A", což překladač vezme na vědomí a pokračuje dál.

sobol

Re:C++ a vliv viditelnosti konstruktoru při vytváření instance
« Odpověď #2 kdy: 10. 02. 2014, 18:32:42 »
Díky.