Я прочитал эффективный C++, о котором упоминается в пункте 04
Избегайте проблем с порядком инициализации в единицах перевода, заменяя нелокальные статические объекты локальными статическими объектами.
Я думаю, что «глобальный и единственный объект» должен быть одноэлементным шаблоном, а не внешним объектом после того, как я прочитал этот пункт.
например, объект ввода-вывода (std::cout)
Но std::cout кажется внешним объектом. (http://www.cplusplus.com/reference/iostream/cout/ )
Я смущен этим.
изменить: добавить код
Я захватываю некоторый код из этой книги.
Во-первых, это плохой код:
class FileSystem {
// from your library’s header file
public:
...std::size_t numDisks( ) const;
// one of many member functions...
};
extern FileSystem tfs;
относительный порядок инициализации нелокальных статических объектов, определенных в разных единицах трансляции, не определен.
Таким образом, вышеупомянутый код может быть ошибкой, когда я вызываю tfs.
Потому что tfs может не завершить инициализацию.
Код рекомендации:
class FileSystem { ... }; // as before
FileSystem& tfs()
{
static FileSystem fs;
return fs;
}
class Directory { ... };// as beforeDirectory::Directory( params )
Directory::Directory( params ) // as before, except references to tfs are
//now to tfs( )
{
...
std::size_t disks = tfs().numDisks( );
...
}
Directory& tempDir()
{
static Directory td(params);
return td;
}
stdin
/stdout
/stderr
. - person melpomene   schedule 20.07.2019std::cout
. - person apple apple   schedule 20.07.2019