我有以下代码:
#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);
| ^~~~
我的问题是,当它们做几乎相同的事情时,为什么有obj1的警告,而没有obj2的警告
这里要实现的关键是,您的代码中实际上有四个对象——类Test
的两个实例和两个指针。Test
的实例没有名称(它们是用new
创建的(,而指针有名称(obj1
和obj2
(。
这里的警告是关于指针对象obj1
的,它只被分配给而不被使用。它在最终任务后指向的对象在该任务前产生了各种副作用,这一事实并不相关。您可以在不影响程序的行为或输出的情况下删除声明或赋值(但不能删除赋值中的新调用(。
int main()
{
new Test(2);
Test* obj2(nullptr);
obj2 = new Test(2);
obj2->initialize(3);
return 0;
}