(找到原因了)(又改了下,感觉有个最下面那块函数,应传入指针的指针)求求哪位大神给看看吧,为何注释部分放开竟然会出错,琢磨一天了啊,万分感谢!!!!!!!!!!!!!!!!!!!!

原创 2013年11月02日 15:44:02

得出的总结就是:delete的内容,必须为new出来的,栈分配的空间肯定是不能使用delete来释放,但堆上的也未必可以,当定义为static string s1=“The test class is SharedPtr”时,虽然是堆上的,但不是new出来的,delete的时候仍然会报错,感谢贴吧里二楼的那个哥们,一语惊醒梦中人,多谢!

 

SharedPtr.h

#pragma once
#include <string>
#include <iostream>
using namespace std;
class SharedPtr
{
public:
	friend class NoName;
	SharedPtr(string* p):sharedPtr(p),count(1){}
	~SharedPtr(void);

private:
	std::string *sharedPtr;
	int count;
};

SharedPtr.cpp
#include "StdAfx.h"
#include "SharedPtr.h"

SharedPtr::~SharedPtr(void)
{
	delete sharedPtr;

}


NoName.h

#pragma once
#include "SharedPtr.h"

class NoName
{
public:
	NoName(void):pString(new SharedPtr(new string)),i(0),d(0){}
	~NoName(void);

	NoName(const NoName&noName):pString(noName.pString),i(noName.i),d(noName.d){
		++pString->count;
	}

	void print();
	int set(string**s);


private:
	SharedPtr* pString;
	
	int i;
	double d;
};


NoName.cpp

 

#include "StdAfx.h"
#include "NoName.h"


NoName::~NoName(void)
{
	if (--pString->count == 0) {
		delete pString;
	}
}
void NoName::print()
{
	cout<<"The sharedPtr is "<<*(pString->sharedPtr)<<endl;
	cout<<"The i is "<<i<<endl;
	cout<<"The d is "<<d<<endl;
}

int NoName::set(string **s)
{
	//为何此处赋值,程序会出错,修改后正常
	pString->sharedPtr = *s;
	i = 10;
	d = 20;
	print();

	return 1;
}


copyInstruct.cpp

 

// copyInstruct.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "NoName.h"

int _tmain(int argc, _TCHAR* argv[])
{

	
	//std::string s1("The Test of sharedPtr!");//错误情况
	//将此处替换为如下所示
	string *s1 = new string("The Test of sharedPtr!");
	NoName no_name;
	//no_name.set(s1);//错误情况
	//此处直接传入new返回的指针,后来感觉此处应传入指针的指针,不然传副本的话,感觉不能delete掉该处的s1
	no_name.set(&s1);
	NoName no_name2(no_name);
	no_name2.print();

	return 0;
}




 

浅谈oracle中的视图和存储过程

视图,存储过程,oracle

目前轻量级弹幕控件中功能最强大的一款

本项目是一个开源的弹幕控件库,能够支持多种样式弹幕,弹幕点击监听,弹幕分区域显示,自定义移动速度等功能,项目原理是通过自定义ViewGroup。可能是目前轻量级弹幕控件中功能最强大的一款了。 G...

构建JDK8报错了,哪位大神能帮忙看下什么原因 ?

构建JDK8报错了,哪位大神能帮忙看下什么原因 ?

哪位大神帮我看看ListView上的数据不能实时更新

package org.lhm.laofengxiang; import java.util.*; import cn.yljd.service.MyXMLParser; import and...
  • mvcgo
  • mvcgo
  • 2013年01月21日 19:15
  • 1340

#跪求 有没有哪位大神知道怎么加入多线程断点续传功能

package jluzh; import java.awt.BorderLayout; import java.awt.GridBagConstraints;   import jav...

请问有哪位大神能破解这个DLL?

  • 2016年06月11日 16:46
  • 1.68MB
  • 下载

哪位大神 能将asp的一段代码逻辑 用java语言实现!!!我QQ“:596963475 求大神!!!

Notepad++ v6.6.8 new feature and bug fixes: 1.  Settings on cloud - Google Drive. 2.  Fix Settings ...

static的应用原理(不知道哪位大神写的)

static对象如果出现在类中,那么该对象即使从未被使用到,它也会被构造以及析构。而函数中的static对象,如果该函数从未被调用,这个对象也就绝不会诞生,但是在函数每次被调用时检查对象是否需要诞生。...

不知道是哪位java大神写给女神的情书~~~~~

我能抽象出整个世界... 但是我却不能抽象出你... 你肯定是一个单例,因为你是那样的独一无二... 所以我的世界并不完整... 我可以重载甚至覆盖这个世界里的任何一种方法... 但是却不能覆盖对你的...

flex成品作--不知道有哪位大神能看懂是干嘛的

小弟布局什么都乱七八糟,但是功能还是行了,不知道哪位大神可以看懂,我乱七八糟的代码,是干嘛的,这功能幸好公司内部用,不然做出去就难看死了 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(找到原因了)(又改了下,感觉有个最下面那块函数,应传入指针的指针)求求哪位大神给看看吧,为何注释部分放开竟然会出错,琢磨一天了啊,万分感谢!!!!!!!!!!!!!!!!!!!!
举报原因:
原因补充:

(最多只允许输入30个字)