Я просматриваю код колледжа, и я вижу, что он имеет несколько констант, определенных в глобальной области, как:
const string& SomeConstant = "This is some constant text";
Лично мне это плохо пахнет, потому что ссылка ссылается на то, что я предполагаю, является анонимным объектом, построенным из данного массива char.
Синтаксически, он легален (по крайней мере, в VС++ 7), и, похоже, он работает, но на самом деле я бы предпочел, чтобы он удалил его, и поэтому нет никакой двусмысленности в отношении того, что он делает.
Итак, разве это ИСТИННО безопасно и законно, и я одержим? Строит ли построенный объект temp гарантированный срок службы? Я всегда предполагал, что анонимные объекты, используемые таким образом, были уничтожены после использования...
Итак, мой вопрос также может быть обобщен на время анонимного объекта. Является ли стандарт диктовать время жизни анонимного объекта? Будет ли он иметь такое же время жизни, как и любой другой объект в той же области? Или это дается только время жизни выражения?
Также, делая это как локальный, он, очевидно, имеет разные значения:
class A
{
string _str;
public:
A(const string& str) :
_str(str)
{
cout << "Constructing A(" << _str << ")" << endl;
}
~A()
{
cout << "Destructing A(" << _str << ")" << endl;
}
};
void TestFun()
{
A("Outer");
cout << "Hi" << endl;
}
Показывает:
Построение A (Outer); Уничтожение A (Outer); Привет