C一个参数布尔构造函数和“new”关键字:逻辑错误
我在c中有以下课程
class MyClass { public: bool flag; MyClass (bool flag = false) { this->flag = flag; } ... }; 在我的主要(用于测试)我有类似的东西 int main() { MyClass number1 = MyClass(true); MyClass number2 = MyClass(false); MyClass number3 = new MyClass(false); MyClass number4 = new MyClass(true); MyClass number5 = new MyClass(); std::cout << number1.flag << number2.flag << std::endl; std::cout << number3.flag << number4. flag << number5.flag << std::endl; } 和我的输出(想象布尔输出true或false,输出格式更好) true,false true,true,true 问题是,当我使用“new”关键字创建“MyClass”对象时,无论我做什么或不放入参数构造函数,它总是将flag变量设置为true. 它适用于不使用“new”但不使用“new”的构造函数.我知道在使用和不使用关键字new之间唯一真正的区别是,如果不使用它,则在堆栈上创建变量,否则在堆上创建变量.我认为这不会出现任何错误. 如果我希望它正常工作,需要改变什么? 谢谢你的帮助! 编辑:这是编译的代码.我有两个文件,Test.c和AbstractCell.h. AbstractCell是MyClass,当这段代码运行时输出“isAlive:1” void test_abstract_2(){ AbstractCell one = new AbstractCell(); std::cout << std::endl << "isAlive: " << one.alive << std::endl; } 解决方法
new返回的指针被隐式转换为bool,然后传递给MyClass(bool).
换句话说,以下内容: MyClass number3 = new MyClass(false); 相当于: MyClass number3(bool(new MyClass(false))); 由于new返回的指针永远不为null,因此转换总是产生true,这是传递给number3的构造函数的.新分配的指针被泄露. 你可能想说: MyClass* number3 = new MyClass(false); MyClass* number4 = new MyClass(true); MyClass* number5 = new MyClass(); (注意星号.) 如果您明确声明构造函数,则不会遇到此问题: explicit MyClass (bool flag = false) { this->flag = flag; } 代码将无法编译,这会立即告诉您有些不对劲. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |