以下代码段有什么问题?
What is wrong in the following snippet?
我知道这是一个相当基本的违规行为,但它是什么?
class xyz
{
void function1()
{
cout<<"in class";
}
};
int main()
{
xyz s1 = new xyz(100);
xyz s2 = s1;
s2.function1();
delete s1;
return 0;
}
使用 new
的内存分配有问题。我相信但我似乎无法理解其背后的基本原理和解决方案。
您不能将 T*
分配给 T
(病理情况除外)。
xyz * s1 = new xyz();
xyz * s2 = s1;
s2->function1();
delete s1;
return 0;
更好的是,不要使用裸 new
和 delete
并使用智能指针:
auto s1 = make_unique<xyz>();
xyz * s2 = s1.get(); // non-owning pointer
s2->function1();
// no explicit delete necessary
new
returns 指向对象的指针(xyz *
),而不是对象,所以你应该更正 s1
的类型:
xyz* s1=new xyz(100);
并通过指针调用方法,您应该使用运算符 ->
:
s1->function1();
这相当于取消引用指针并调用对象上的方法:
(*s1).function1();
我知道这是一个相当基本的违规行为,但它是什么?
class xyz
{
void function1()
{
cout<<"in class";
}
};
int main()
{
xyz s1 = new xyz(100);
xyz s2 = s1;
s2.function1();
delete s1;
return 0;
}
使用 new
的内存分配有问题。我相信但我似乎无法理解其背后的基本原理和解决方案。
您不能将 T*
分配给 T
(病理情况除外)。
xyz * s1 = new xyz();
xyz * s2 = s1;
s2->function1();
delete s1;
return 0;
更好的是,不要使用裸 new
和 delete
并使用智能指针:
auto s1 = make_unique<xyz>();
xyz * s2 = s1.get(); // non-owning pointer
s2->function1();
// no explicit delete necessary
new
returns 指向对象的指针(xyz *
),而不是对象,所以你应该更正 s1
的类型:
xyz* s1=new xyz(100);
并通过指针调用方法,您应该使用运算符 ->
:
s1->function1();
这相当于取消引用指针并调用对象上的方法:
(*s1).function1();