为什么有未使用但设置了变量的指针警告



我有以下代码:

#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创建的(,而指针有名称(obj1obj2(。

这里的警告是关于指针对象obj1的,它只被分配给而不被使用。它在最终任务后指向的对象在该任务前产生了各种副作用,这一事实并不相关。您可以在不影响程序的行为或输出的情况下删除声明或赋值(但不能删除赋值中的新调用(。

int main()
{
new Test(2);

Test* obj2(nullptr);
obj2 = new Test(2);
obj2->initialize(3);    

return 0;
}

相关内容

  • 没有找到相关文章

最新更新