Я новичок в Java (работаю на Android). Я видел код, как,
new DownloadFilesTask().execute(url1, url2, url3);
Здесь безымянный (Я не уверен, что использую правильную терминологию) объект используется для вызова метода execute объекта DownloadFilesTask.
То же самое я пытался использовать с C ++, и следующие фрагменты кода.
#include <iostream>
#include <vector>
using namespace std;
class Sam
{
public:
void Access()
{
cout<<"Access";
}
};
int main(int argc, char* argv[])
{
(new Sam())->Access; //for Access method intillesence is working fine
return 0;
}
Когда я пытаюсь запустить этот код, я получаю ошибку компиляции,
Ошибка 1 ошибка C3867: «Sam :: Access»: аргумент вызова функции отсутствует
список; использовать&Sam :: Access ‘для создания указателя на
член c: \ users \ new-user \ documents \ visual studio
2012 \ projects \ autoexample \ autoexample \ autoexample.cpp 18 1 autoExample
Я не понимаю смысл и причину ошибки. Возможен ли этот тип кода в C ++?
Благодарю.
Как уже говорилось в комментариях, вам не хватает скобок, необходимых для вызова метода.
Access()
// ^^ These
Тем не менее, более важной проблемой, которую необходимо решить, является использование вами new
, Не используйте его так, как сейчас. Используя его таким образом, вы создаете утечку памяти, которую вы никогда не сможете исправить, потому что у вас никогда не будет возможности использовать delete
в теме[1] (если вы не закроете свою программу …).
Чтобы использовать временные значения в C ++, просто используйте основанный на стеке объект автоматического хранения (другими словами, обычные объекты):
Sam().Access();
//^^^^^ This creates the temporary object
Тем не менее, вы все равно должны быть осторожны, чтобы не использовать это временное в последующих операторах, проблема, которая обычно встречается при смешивании их со ссылками.
Sam& bad_sam = Sam().I_Return_A_Reference_To_This_Object();
bad_sam.Access(); // Oh no!
В приведенном выше примере временный объект, созданный Sam()
будет уничтожен в конце заявления (следовательно, является временным). bad_sam.Access();
будет незаконным и приведет к неопределенное поведение.
[1] гм говорит язык юристов. Конечно, вы можете использовать delete this;
… К ОП: не надо!
Других решений пока нет …