Я бы хотел [хотел бы] иметь в объявлении вызова функции какой-то способ указать, что память, переданная по ссылке, должна считаться недействительной по возвращении из функции, и чтобы компилятор выдавал ошибку, если вызывающая сторонапытается использовать его после возврата вызова функции.
Я думаю, что вы путаете несколько вещей здесь.
Например, вы не передаете объект памяти функции, а объект (изтип rectangle
). Объект - это больше, чем блоб памяти.
У объекта есть конструктор run, превратить каплю памяти в объект и установить объект в определенное состояние.Когда объект умирает, его деструктор будет запущен и превратит объект в блок памяти снова.Между этими двумя объектами находится объект.
Чтобы сделать объект недействительным, вам нужно либо установить один или несколько флагов, которые являются частью состояния объекта и аннулирования сигнала (это делают потоки ввода-вывода), либо вызвать его деструктор.- что (обычно) вы должны делать только косвенно, либо delete
ing и объектом, созданным с использованием new
, либо неявно, позволяя ему выпасть из области видимости (для автоматических объектов).
Это оставляет функции для изменения объектов, переданных им.
Функция указывает вероятность того, что онаможет изменить аргумент с помощью сигнатуры и, взглянув на , как объект передается функции , вы увидите, может ли функция его изменить.Если вам нужно вызвать функцию и вам нужно передать объект, который по какой-то причине нельзя изменить, в качестве аргумента, для которого функция указывает, что он может измениться, вам нужно передать copy этого объекта, а не реальной вещи.
Если вы хотите запретить использование объекта после того, как он был использован в качестве аргумента функции, по какой-то причине, которую я здесь не коснулся, вы можете просто поместить его в небольшую ограничивающую область:
void f()
{
g();
{
rectangle rect(...);
h(r);
} // rect dies here
// rect not accessible here
g();
}