auto_ptr_ref干什么用的?

earthharp 2002-11-10 02:11:16
up
...全文
95 25 打赏 收藏 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
LoveCreatesBeauty 2003-04-18
  • 打赏
  • 举报
回复
学习
deanjiang 2002-12-06
  • 打赏
  • 举报
回复
flyingbugs(网际)
我手里没有VC6不敢乱讲,不过vc7是有的。我正在写一个模板库,还参考过这些代码呢。
auto_ptr_ref的用途我在前面已经说过了,在强调一句,它不是让你直接使用的,是给编译器做类型转换用的,你的程序永远不需要显示的使用它。
flyingbugs 2002-12-02
  • 打赏
  • 举报
回复
deanjiang(dean) :
vc的stl实现了吗???
vc7我不知道,至少在vc6.0中是没有的!!!

还有,这个auto_ptr_ref基本没什么用.

deanjiang 2002-11-29
  • 打赏
  • 举报
回复
flyingbugs:
vc的stl当然实现了auto_ptr_ref, 就在auto_ptr前面几行的位置。
gcc也实现了。
auto_ptr_ref 的使用方式是一种很标准的方法了,应该是很有名的。
sogald_2001 2002-11-29
  • 打赏
  • 举报
回复
Up.
张友邦 2002-11-29
  • 打赏
  • 举报
回复
我看的是Plauger的auto_ptr实现,其中的operator =会引起被对象释放它所管理的指针,拷贝构造函数不会引起对象的释放。所以,hucong(stupid urchin) 是不是弄错了。
张友邦 2002-11-29
  • 打赏
  • 举报
回复
我也写了个测试程序,
#include <iostream>
#include <memory>

using std::cout;
using std::endl;

class test
{
public:
test() { cout << "ctor" << endl; }
~test() { cout << "dtor" << endl; }
void dosomething() { cout << "do something" << endl; }
};
typedef std::auto_ptr<test> test_ptr;

void fun(test_ptr _obj)
{
_obj->dosomething();
}

void main()
{
test_ptr obj(new test);
fun(obj);
}

输出结果为:

ctor
do something
dtor
flyingbugs 2002-11-29
  • 打赏
  • 举报
回复
template <typename _Tyf>
class smart_ptr
{
public:
typedef _Tyf element_type;
smart_ptr(_Tyf * _P=0) throw()
:_Owns(_P!=0),_Ptr(_P){}
smart_ptr(const smart_ptr<_Tyf> &_Y) throw()
:_Owns(_Y._Owns),_Ptr(_Y.release()){}
smart_ptr<_Tyf>& operator=(const smart_ptr<_Tyf>& _Y) throw()
{
if(this != &_Y)
{
if(_Owns)
{
if(_Ptr != _Y._Ptr)
{
delete _Ptr;
_Owns = _Y._Owns;
_Ptr = _Y.release();
}
else
{
_Owns = _Owns||_Y._Owns;
}

}
else
{
_Owns = _Y._Owns;
_Ptr = _Y.release();
}
}
return (*this);
}
~smart_ptr()
{
cout<< "before delete" << endl;
cout<< "_Owns: "<< _Owns << endl;
if (_Owns)
delete _Ptr;
cout << "~smart_ptr()" << endl;
}
_Tyf& operator*() const throw()
{return (*get()); }
_Tyf *operator->() const throw()
{return (get()); }
_Tyf *get() const throw()
{return (_Ptr); }
_Tyf *release() const throw()
{((smart_ptr<_Tyf> *)this)->_Owns = false;
return (_Ptr); }

private:
bool _Owns;
_Tyf* _Ptr;
};
flyingbugs 2002-11-29
  • 打赏
  • 举报
回复
auto_ptr_ref
一般都没有实现

你可以看看vc带的stl的源代码。
deanjiang 2002-11-26
  • 打赏
  • 举报
回复
其实事情很简单,怎么会有这么多人不清楚。
剧个例子
auto_ptr<int> foo(auto_ptr<int>);
我可以这样调用
auto_ptr<int> ptrInt=foo(new int);
参数中的指针会自动构造一个auto_ptr<int>对象,是一个临时变量变量,也就是受是一个右值。auto_ptr的拷贝构造函数使用非const的引用,需要左值进行结合,为了参数匹配通过auto_ptr_ref进行了两次类型转换,从而逃过了对右值的约束。函数的返回值的处理也是类似的。
根本上,auto_ptr的拷贝函数的语义并不是拷贝,这才是引出麻烦的根源
hucong 2002-11-15
  • 打赏
  • 举报
回复
class A
{
public:
A(){std::cout<<"A()\n";}
~A(){std::cout<<"~A()\n";}
const char* getClassName()const{return "A";}
};

void f(std::auto_ptr_ref<A> aRef)
{//如果把auto_ptr_ref改成auto_ptr看看,结果会输出几个构造和析构
aRef._Ref->getClassName();
}

int main(int argc, char* argv[])
{
using namespace std;
auto_ptr<A> a(new A);
f(a);

return 0;
}

这是我写测试类,不知道对你们的问题有没有帮助,建议大家看看boost库四个灵巧指针的实现,那里根本就不需要这么麻烦了,而且有两个能用户STL标准容器.
kxw 2002-11-14
  • 打赏
  • 举报
回复
7up
kxw 2002-11-13
  • 打赏
  • 举报
回复
我也想请教,up

不过,我写的可是源码里的注释!
earthharp 2002-11-13
  • 打赏
  • 举报
回复
up
earthharp 2002-11-12
  • 打赏
  • 举报
回复
up
up
zhuoshenme 2002-11-11
  • 打赏
  • 举报
回复
to earthharp
看书的时候,我也不太清楚他的用法,为了让自己能再过一遍,就摘抄过来了
刚刚也试了一下,也没有弄清楚

看来,要请斑竹了
earthharp 2002-11-11
  • 打赏
  • 举报
回复
难道这也能算理由吗?
哪些不支持的language features是什么呢?
kxw 2002-11-11
  • 打赏
  • 举报
回复
别人有什么观点吗??

up
kxw 2002-11-11
  • 打赏
  • 举报
回复
要问为什么,这就是为什么
According to the C++ standard, these conversions are required. Most present-day compilers, however, do not enforce that requirement---and, in fact, most present-day compilers do not support the language features that these conversions rely on.
kxw 2002-11-11
  • 打赏
  • 举报
回复
源码中的确不是const


auto_ptr(auto_ptr& __a) __STL_NOTHROW : _M_ptr(__a.release()) {}
加载更多回复(5)
内容概要:本文提出了一种基于高保真电磁暂态仿真的智能电网虚假数据注入攻击(FDIA)数据集构建与影响分析方法,依托PSCAD与MATLAB联合仿真平台,构建IEEE标准测试系统(如9节点或39节点系统)的精细化电磁暂态模型,精确模拟电网在正常运行及遭受FDIA下的动态响应过程,采集高精度、高时间分辨率的电压、电流、功率等电气量时序数据,生成具有强物理约束性和可复现性的攻击数据集。研究进一步结合现代状态估计理论、残差检测机制与机器学习分类算法,对FDIA的隐蔽性特征、攻击传播路径、系统关键变量偏移程度及暂态稳定性影响进行系统性量化评估,旨在为智能电网安全防护体系的设计、入侵检测模型的训练与攻防策略的有效性验证提供高可信度的数据基础与理论支撑。; 适合人群:面向电力系统自动化、能源互联网安全、工业控制系统安全等方向的研究生、科研人员及工程技术人员,要求具备电力系统分析、状态估计基础、MATLAB/PSCAD联合仿真能力以及基本的网络安全背景知识。; 使用场景及目标:① 复现和验证主流FDIA相关学术论文中的攻击模型与检测算法;② 构建符合实际物理规律、可用于训练深度学习或机器学习驱动的入侵检测系统(IDS)的真实攻击数据集;③ 深入探究虚假数据注入对电网暂态稳定性、继电保护动作逻辑、频率调节等关键功能的影响机理。; 阅读建议:本资源以高保真仿真为核心,强调数据生成的真实性与实验可重复性,读者应重点关注PSCAD与MATLAB之间的数据交互机制、攻击向量的设计原则与注入方式、以及多维度影响评估指标体系的构建方法,建议结合所提供的仿真模型与代码进行动手实践与结果验证。
内容概要:本文系统阐述了基于格子Boltzmann方法(Lattice Boltzmann Method, LBM)对二维通道内多孔介质流动进行数值模拟的理论体系、Matlab代码实现流程及结果验证方法。深入剖析了LBM在处理复杂流体系统尤其是不规则几何结构多孔介质流动中的独特优势,详细介绍了模型构建过程、边界条件设定、碰撞与传播环节的算法实现机制,并通过Matlab编程完成仿真运算,实现了对速度场、压力场等关键物理量的可视化分析与精度验证,确保模拟结果具备良好的准确性与可靠性。; 适合人群:具备流体力学基础知识和一定Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事多孔介质流动、计算流体力学(CFD)或LBM方法研究的相关领域研究人员。; 使用场景及目标:①掌握格子Boltzmann方法的核心原理及其在多孔介质流动模拟中的具体应用;②学习利用Matlab实现LBM算法并开展科学计算与结果可视化的方法;③为相关科研项目、学术论文复现或实际工程仿真提供可复用的代码框架与技术实施路径。; 阅读建议:建议读者结合流体力学与数值计算相关背景知识,逐步理解算法推导过程,动手运行并调试所提供的Matlab代码,通过调整参数或几何模型加深对LBM方法灵活性与适用性的认识,同时鼓励将该方法拓展至三维流动或多物理场耦合问题的研究中。
内容概要:本文聚焦于“基于变频与移相协同控制的全桥LLC变换器模式切换平滑性优化”这一关键技术问题,通过Simulink仿真平台构建全桥LLC谐振变换器的详细模型,深入研究其在不同工作模式间切换时的动态响应特性。针对传统控制方式在模式切换过程中易引发电压电流冲击、导致系统效率下降与稳定性恶化的问题,提出一种融合变频控制(Frequency Modulation)与移相控制(Phase-Shift Control)的混合协同控制策略。该策略通过精确设计控制逻辑切换时序,优化谐振腔参数匹配,并分析过渡过程中的能量流动规律,有效抑制瞬态波动,实现高效、平稳的模式切换。仿真结果验证了该方法在提升系统动态性能、增强运行可靠性方面的优越性; 适合人群:电力电子、电气工程及其自动化等相关领域的研究生、科研人员以及从事高频电源、新能源变换系统设计的工程技术人员,尤其适合具备电路拓扑分析能力与Simulink建模经验的专业人士; 使用场景及目标:①用于高效率DC-DC变换器中复杂模式切换控制策略的研究与改进;②为电动汽车车载充电机、数据中心电源、光伏微逆变器等对动态性能要求严苛的应用场景提供平滑切换的技术方案;③支撑高水平学术论文的复现、验证与创新性拓展,服务于科研项目中的关键控制算法开发与仿真验证; 阅读建议:建议结合提供的Simulink模型进行同步操作,重点关注变频与移相控制的切换逻辑、参数整定方法及过渡过程的能量管理机制,深入理解两种控制方式的协同作用原理,并可通过调整负载条件、输入电压或谐振元件参数开展多工况仿真分析,以全面掌握系统动态特性。

24,850

社区成员

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

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