65,210
社区成员
发帖
与我相关
我的任务
分享我的意思是 打印此函数的返回值
居然能正确打印
也就是说newname在返回后 没有被马上析构
猜想可能跟编译器的实现策略有关系
// test7.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
#include <iostream>
using namespace std;
class Base
{
private:
char * name;
public:
Base(char * className)
{
name = new char[strlen(className)];
strcpy(name, className);
}
~Base()
{
delete[] name;
}
char * copyName()
{
char newname [256];
strcpy(newname, name);
return newname;
}
char * getName()
{
return name;
}
static void print(const Base &base) //此处使用引用
{
printf("static name: %s\n" ,base.name);
}
};
class Subclass : public Base
{
public:
Subclass(char * className) : Base(className)
{
}
};
int main()
{
Base * pBase = new Subclass("test");
Base::print(*pBase);
printf("name: %s\n", pBase->getName());
printf("new name: %s\n", pBase->copyName());
system("pause");
return 0;
}
#include <string.h>
#include <stdio.h>
class Base
{
private:
char * name;
public:
Base(char * className)
{
int n = strlen(className);
//给字符串指针分配空间时,需要多分配一个空结尾
name = new char[strlen(className)+1];
strcpy(name, className);
name[strlen(className)] = '\0';
}
~Base()
{delete name;}
char * copyName()
{
char newname [256];
strcpy(newname, name);
//不可以返回临时变量的指针或引用
return newname;
}
char * getName()
{return name;}
//需要按引用传递,因为你没有实现深拷贝
static void print(Base &base)
{printf("name: %s\n" , base.name);}
};
class Subclass : public Base
{
public:
Subclass(char * className) : Base(className)
{ }
};
int main()
{
Base * pBase = new Subclass("test");
Base::print(*pBase);
printf("name: %s\n", pBase->getName());
printf("new name: %s\n", pBase->copyName());
return 0;
}
#include <string.h>
#include <stdio.h>
class Base
{ private:
char * name;
public:
Base(char * className)
{
name = new char[strlen(className)];
strcpy(name, className);
}
~Base()
{delete []name;} /////////////////////使用delete[]
char * copyName()
{
char newname [256];
strcpy(newname, name);
return newname;
}
char * getName()
{return name;}
static void print(Base &base) //////////////////////使用引用
{printf("name: %s\n" , base.name);}
};
class Subclass : public Base
{
public:
Subclass(char * className) : Base(className)
{ }
};
int main()
{
Base * pBase = new Subclass("test");
Base::print(*pBase);
printf("name: %s\n", pBase->getName());
printf("new name: %s\n", pBase->copyName());
return 0;
}