Я просмотрел спецификацию и нашел следующую информацию. Краткая версия - это async function
desugars к генератору, который дает Promise
s. Итак, да, асинхронные функции возвращают обещания.
Согласно tc39 spec , верно следующее:
async function ?
Desugars to:
function ?{ return spawn(function*() , this); }
Где spawn
"является вызовом следующего алгоритма":
function spawn(genF, self) {
return new Promise(function(resolve, reject) {
var gen = genF.call(self);
function step(nextF) {
var next;
try {
next = nextF();
} catch(e) {
// finished with failure, reject the promise
reject(e);
return;
}
if(next.done) {
// finished with success, resolve the promise
resolve(next.value);
return;
}
// not finished, chain off the yielded promise and `step` again
Promise.resolve(next.value).then(function(v) {
step(function() { return gen.next(v); });
}, function(e) {
step(function() { return gen.throw(e); });
});
}
step(function() { return gen.next(undefined); });
});
}
Кто будет отвечать за удаление объектов, созданных с помощью new?
blockquote>Кто бы ни создал объект, используя
new
.Вы создали объект, используя
new
, поэтому вы несете ответственность за его удаление.Я знаю, что если вы используете функцию
blockquote>set_allocated
, то protobuf позаботится об удалении, если вы не вызоветеrelease
Correct. Если вы передаете право владения указателем куда-либо еще, ответственность за удаление ложится на владельца. Если вы не передадите право собственности (как в примере программы), то ответственность остается за вами. Если вы не удалите его, то утечка памяти.