Анон обясни, я нихуя нипанимаю. Почему конструктор класса A вызывается 2 раза? Ведь статик же. Юзаю VS2008.---A.h------#pragma oncestatic class A{public:A();~A();} aobj;----------------A.cpp---#include "A.h"A::A(){int kk = 0;}A::~A(){}--------------main.cpp--#include "A.h"int main(){return 0;}--------------
Анон обясни, я нихуя нипанимаю. Почему конструктор класса A вызывается 2 раза? Ведь статик же. Юзаю VS2008.---A.h------#pragma once
static class A{public:
A();~A();
} aobj;----------------A.cpp---#include "A.h"
A::A(){
int kk = 0;
}
A::~A(){}--------------main.cpp--#include "A.h"
int main(){
return 0;
}--------------
Все правильно. #include "A.h" у тебя два раза в двух разных сишных исходниках. Даже тут в более другом треде уже объясняли, что инклюд - это как копипаста содержимого хедара в сишник. Вот у тебя и получаются два aobj, один локально для main.cpp, другой локально для A.cpp, оба вполне себе статики.#pragma once тут, конечно, не спасет. Тут на самом деле ничего уже не спасет. Просто не объявляй переменный в хедарах, которые собираешься инклюдить более, чем в один сишник. И вообще не объявляй переменные в хедарах.
>>1388Но ведь #pragma once же.
>>1388А сорри, я все понял. Про #pragma once сначала не увидел.
>>1388> Тут на самом деле ничего уже не спасет.---A.h------#ifndef _A_H#define _A_Hstatic class A{public:A();~A();} aobj;#endif
>>1388
> Тут на самом деле ничего уже не спасет.
---A.h------#ifndef _A_H#define _A_H
} aobj;
#endif
- wakaba 3.0.8 + futaba + futallaby -