#c
#c
Вопрос:
Когда я предоставляю конструктор для класса A, я не получаю локальную переменную без ссылок, почему? Что делает пустой конструктор, чтобы устранить предупреждение?
class A
{
public:
A() {}
};
int main()
{
A a;
}
Комментарии:
1. Какой компилятор вы используете?
2. @Jacob: Компилятор VC с флагом предупреждения: /W3
Ответ №1:
Это всего лишь теория, но поскольку конструктор может содержать код, который может вызывать побочные эффекты, кто-то может решить создать неиспользуемый объект просто для запуска этого кода. Если у вас нет конструктора и вы никогда не ссылаетесь на созданный вами объект, то можно с уверенностью определить, что у объекта нет назначения.
Комментарии:
1. @Muggen: «Это всего лишь теория …»
2. Это только теория, но она имеет логический смысл. Было бы интересно взглянуть на исходный код компилятора (если это компилятор с открытым исходным кодом, который использует OP)
3. Компилятор Visual C (который, как я предполагаю, использует OP на основе текста предупреждения) не является открытым исходным кодом, но ваше объяснение имеет наибольший смысл. В официальной документации говорится, что добавление конструктора «отключит» предупреждение в этом конкретном случае.
Ответ №2:
Например, если A
есть что-то, что содержит блокировку мьютекса (и снимает блокировку при разрушении), то этот код
int main()
{
A a;
// other actions
}
способен поддерживать потокобезопасность этой функции, даже a
на которую нет ссылок.