DNa*_*mto 0 c++ destructor exception
我知道这是非常基本的,但不知何故我正在研究不同的技术,我已经把我的C++概念搞得一团糟
我创建了一个简单的程序,但是在调用析构函数时它会给出异常.
以下是代码:
#include "stdafx.h"
#include<iostream>
using namespace std;
class Employee
{
public:
Employee(char *name){
cout<<"Employee::ctor\n";
myName_p = new char(sizeof(strlen(name)));
myName_p = name;
}
void disp(){cout<<myName_p;}
~Employee()
{
cout<<"Employee:dtor\n\n";
delete myName_p;
}
private:
char *myName_p;
};
int main()
{
Employee emp("check");
emp.disp();
return(0);
}
Run Code Online (Sandbox Code Playgroud)
要求所有人明确这个基本概念.根据我的理解,我们不能使用delete [],因为在这种情况下我们没有使用new [].虽然我尝试过使用delete [],但它仍然给出了错误
你真的应该std::string在这里使用.
它非常容易,特别是初学者.错误列表是:
name,它应该是strlen(name)+1,不使用sizeof任何东西.new char[strlen(name)+1].strcpy而不是name_p = name- 后者泄漏您刚刚分配的内存,然后您有一个指向const char *您不应删除的内容的指针.delete [] name_p;.但是,你反而使用std::string,所有上述问题都完全消失了,你可以这样做:
Employee(char *name) name_p(name) { ... }
Run Code Online (Sandbox Code Playgroud)
并摆脱所有问题new,delete并复制.当然,name_p可能不再是变量的合适名称,但是你明白了.