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

问题描述 投票:0回答:1

我有以下代码:

#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 却做几乎相同的事情?

c++11 g++ compiler-warnings gcc-warning
1个回答
0
投票

这里要认识到的关键是,您的代码中实际上有四个对象 - 类

Test
的两个实例和两个指针。
Test
的实例没有名称(它们是用
new
创建的),而指针有名称(
obj1
obj2
)。

这里的警告是关于指针对象

obj1
,它仅被分配且未被使用。事实上,它在最终赋值之后指向的对象在该赋值之前已经产生了各种副作用,这一事实是不相关的。您可以删除赋值声明(但不能删除赋值中的新调用),而不会影响程序的行为或输出。

int main() {
    new Test(2);
    
    Test* obj2(nullptr);
    obj2 = new Test(2);
    obj2->initialize(3);    
    
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.