我有以下代碼:
#include <iostream>
class Test
{
public:
Test(int i)
{
initialize(i);
}
void initialize(int i)
{
std::cout<<"i: "<<i<<std::endl;
}
};
int main()
{
Test* obj1(nullptr);
obj1 = new Test(2);
Test* obj2(nullptr);
obj2 = new Test(2);
obj2->initialize(3);
return 0;
}
當我這樣編譯時(GCC v11.2.0):
g -Wall --std=c 11 main.cpp
我看到以下警告:
main.cpp: In function ‘int main()’:
main.cpp:25:15: warning: variable ‘obj1’ set but not used [-Wunused-but-set-variable]
25 | Test* obj1(nullptr);
| ^~~~
My question is why is there a warning for obj1, but not obj2 when they do almost the same thing?
uj5u.com熱心網友回復:
這里要實作的關鍵是您的代碼中實際上有四個物件——類的兩個實體Test和兩個指標。的實體Test沒有名稱(它們是用創建的new),而指標確實有名稱(obj1和obj2)。
這里的警告是關于指標物件obj1的,它只被分配給而不被使用。它在最終分配之后指向的物件在該分配之前具有各種副作用的事實無關緊要。您可以洗掉分配的宣告(但不是分配中的新呼叫),而不會影響程式的行為或輸出。
int main()
{
new Test(2);
Test* obj2(nullptr);
obj2 = new Test(2);
obj2->initialize(3);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/455165.html
