Auch wenn das Thema wurde hier oft diskutiert, kann ich keine schlüssige Erklärung zu meinem speziellen Fall finden. Will const
die Lebensdauer des RefTest
vorübergehend verlängern? Ist das folgende Beispiel legal?Const Referenz als Klassenmitglied
#include <iostream>
class RefTest
{
public:
RefTest(const std::string &input) : str(input) {}
~RefTest() {std::cout << "RefTest" << std::endl;}
private:
std::string str;
};
class Child
{
public:
Child (const RefTest &ref) : ref_m(ref) {}
~Child() {std::cout << "Test" << std::endl;}
private:
const RefTest &ref_m;
};
class Test
{
public:
Test() : child(RefTest("child")) {}//Will the temporary get destroyed here?
~Test() {std::cout << "Test" << std::endl;}
private:
const Child child;
};
int main()
{
Test test;
}
Das letzte Zeile kein Objekt schafft überhaupt . Es erklärt eine Funktion. Siehe http://en.wikipedia.org/wiki/Most_vexing_parse. –
@OliCharlesworth Oh, schießen. Ich fürchtete, das Beispiel ist dumm :(Bitte sehen Sie meine aktualisierte, die ein bisschen näher an meiner realen Situation sein sollte. Dieses Mal, ich glaube nicht, dass es irgendwelche ärgerlichen Parse-Probleme geben sollte. –
@NayanaAdassuriya die 'test2 '? Ich hatte mein anfängliches Beispiel umgeschrieben, weil ich nicht genug darüber nachgedacht habe. –