У меня есть необычное требование, чтобы переменная всегда была в куче, а не в стеке. Теперь я попытался сделать это с помощью частного деструктора и статического метода класса, который просто возьмет указатель и вызовет delete на нем.Как разместить переменную в стеке или на куче
Class A
{
public :
static void method(const A* ptr)
{
delete ptr;
}
private :
~A();
};
Но теперь я просто любопытно, чтобы лучше видеть altrnative и одна вещь пришла мне в голову, если я могу добавить некоторые предварительно проверить каждый метод, чтобы увидеть погоду переменная на стеке или куче, то я не должны объявить статический метод. Может ли кто-нибудь сказать мне, как это сделать? У меня только одно решение - использовать sbrk (0) или pthread API для получения границы текущего стека, а затем сравнить его с адресом переменной класса, но не переносимым.
Благодаря Niraj Rathi
Удалённый тег 'c'. –
Тестовая программа, которую я написал, находится на C++, но это применимо к C, а также где у одного нет возможности определять местоположение указателя на стеке или на куче? – anonymous
См. [Этот вопрос] (http://stackoverflow.com/questions/16360620/find-out-whether-a-pointer-is-pointing-at-the-stack-heap-or-program-text). Это невозможно сделать портативным способом. Для многих систем ваше текущее решение будет делать то, что вы хотите, хотя технически это означает только то, что вы не можете иметь объект 'A' с * автоматическим временем хранения *. – us2012