Хорошо, но вам понадобятся резкие реакции, чтобы определить, когда «создание объекта» будет успешным.
class MyObject {
private:
int x
public:
MyObject() { x = 0; }
};
int main(int argc, char **argv) {
IWantToExhaustTheStack();
return 0;
}
void IWantToExhaustTheStack() {
MyObject o;
IWantToExhaustTheStack();
}
Теперь скомпилируйте и запустите это, в течение очень короткого времени, пока ваше создание объекта будет работать. Вы будете знать, что создание объекта не удалось, когда ваша программа не удалась.
Шутки в сторону, и в ответ на ваш обновленный вопрос не существует стандартного способа определения размера стека. См .: Этот Stackoverflow Вопрос по отношению к Win32. Однако стек используется для вызова методов и хранения локальных временных и возвращаемых переменных. Если вы размещаете большие объекты в стеке, вам действительно следует подумать о том, чтобы поместить их в кучу.