不解Ms-VC++6 下的 std::auto_prt 之怪现象?请教大虾了...

yecao_kinux 2003-06-20 04:20:05
//不解Ms-VC++6 下的 std::auto_prt 之怪现象?请教大虾了...
#include <iostream>
#include <memory>

class A
{
public:
A():_i(10)
{
std::cout<<"A::A()"<<std::endl;
}

~A()
{
std::cout<<"A::~A()"<<std::endl;
}

public:
int _i;
};

void main(void)
{
std::cout<<"Hello,the world!"<<std::endl;

std::auto_ptr<A> p1(new A);//A::A()
std::cout<<"p1=> p1->_i = "<<p1->_i<<std::endl;

std::auto_ptr<A> p2(new A);//A::A()
p2->_i = 20;
std::cout<<"p2=> p2->_i = "<<p2->_i<<std::endl;


std::cout<<"p2=p1 -> begin"<<std::endl;
p2 = p1;//A::~A()
p1->_i = 8;
std::cout<<"p2=p1 -> end"<<std::endl;

std::cout<<"p2=> p2->_i = "<<p2->_i<<std::endl;
std::cout<<"p1=> p1->_i = "<<p1->_i<<std::endl;

{
std::cout<<" Test p3 -> Begin "<<std::endl;
std::auto_ptr<A> p3 = p2;
std::cout<<"p3 = p2 -> end"<<std::endl;

std::cout<<"p1=> p1->_i = "<<p1->_i<<std::endl;
std::cout<<"p2=> p2->_i = "<<p2->_i<<std::endl;
std::cout<<"p3=> p3->_i = "<<p3->_i<<std::endl;

std::cout<<" Test p3 -> end "<<std::endl;
}//A::~A()

//在这之后为什么不出错?请教大虾
p1->_i = 100;
std::cout<<"p1->_i = 100"<<std::endl;
std::cout<<"p2=> p2->_i = "<<p2->_i<<std::endl;
std::cout<<"p1=> p1->_i = "<<p1->_i<<std::endl;

std::cout<<"The end!"<<std::endl;
}

/////////////////////////////////
//ms vc6 下运行结果
/*
Hello,the world!
A::A()
p1=> p1->_i = 10
A::A()
p2=> p2->_i = 20
p2=p1 -> begin
A::~A()
p2=p1 -> end
p2=> p2->_i = 8
p1=> p1->_i = 8
Test p3 -> Begin
p3 = p2 -> end
p1=> p1->_i = 8
p2=> p2->_i = 8
p3=> p3->_i = 8
Test p3 -> end
A::~A()//在这一步之前的结果都好理解,不解的是之后为什么不出错?
p1->_i = 100
p2=> p2->_i = 100
p1=> p1->_i = 100
The end!
Press any key to continue
*/
...全文
164 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yecao_kinux 2003-06-23
  • 打赏
  • 举报
回复
多谢!问题我已经有答案了
何哀何欢 2003-06-21
  • 打赏
  • 举报
回复
vc虽然对标准是不全面支持,但我认为一定是你的程序有问题。vc是目前最好的编译器。
fangrk 2003-06-20
  • 打赏
  • 举报
回复
我也不知道,反正VC6对标准支持得不好;更何况理想和现实总是有差距的:)
yecao_kinux 2003-06-20
  • 打赏
  • 举报
回复
对呀,在DevC++中,我们所料的结果相同:在做完p2 = p1;之后,p1->_i = 8;时就出错了.vc6下不是这样的,最难解的是在第二个A::~A()完之后,还运行

p1->_i = 100;//这之后的代码,为什么会这样?

fangrk 2003-06-20
  • 打赏
  • 举报
回复
p2 = p1;//A::~A()
p1->_i = 8;
就应该有问题了吧!
yecao_kinux 2003-06-20
  • 打赏
  • 举报
回复
dec c++ 中是可以和理的.我是说
std::cout<<"p2=p1 -> begin"<<std::endl;
p2 = p1;//A::~A()
std::cout<<"p2=p1 -> end"<<std::endl;
p2->_i = 9;
p1->_i = 8;//dev C++ 这一步就出错了//这和auto_prt的普遍意思相同
fangrk 2003-06-20
  • 打赏
  • 举报
回复
你有没有尝试过其它的编译器?
最好有两种编译器,这样可以避免因为单一编译器的“特性”而给你造成错觉。况且vc6对标准支持的不大好。
vc7或者borland c++ builder 6试试看
【顶级EI完美复现】电力系统碳排放流的计算方法【IEEE 14节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE 14节点电力系统的碳排放流计算方法,并提供了Matlab代码实现,属于顶级EI期刊级别的研究成果复现。该方法通过建立电力系统中各节点的碳排放流动模型,结合潮流计算与电源出力特性,量化不同机组和线路的碳排放责任,进而实现对电力系统低碳运行的评估与优化。文中详细阐述了算法原理、数学模型构建及仿真步骤,适用于电力系统低碳化分析与碳足迹追踪研究。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事能源系统低碳化研究的专业技术人员,尤其适合致力于高水平论文复现与算法开发的研究者。; 使用场景及目标:①用于电力系统碳排放流的精确建模与可视化分析;②支撑“双碳”背景下电网低碳调度、绿色电力溯源与碳配额分配等应用场景;③为撰写高水平学术论文(如EI/SCI)提供可复现的技术路径与代码基础。; 阅读建议:建议读者结合IEEE 14节点系统标准数据,逐步运行并调试所提供的Matlab代码,深入理解碳流分配逻辑与矩阵运算实现方式,同时可拓展至其他节点系统以验证算法通用性。
基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计与控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现与调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理与实现方法;②学习如何在STM32平台上进行电机控制算法的移植与优化;③为开发高性能、低成本的电机驱动系统提供技术参考与实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型与实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧