C++ 在C+中仅强制执行一个有效的数据副本+;
我有一个表示临时文件的类。大致上,它看起来是这样的C++ 在C+中仅强制执行一个有效的数据副本+;,c++,C++,我有一个表示临时文件的类。大致上,它看起来是这样的 class TempFile { private: std::string mName; public: TempFile() : mName(std::tmpnam(NULL)) {} ~TempFile() { //File automatically deleted when this goes out of scope std::remove(mName.c_str
class TempFile {
private:
std::string mName;
public:
TempFile() :
mName(std::tmpnam(NULL)) {}
~TempFile() {
//File automatically deleted when this goes out of scope
std::remove(mName.c_str());
}
};
如果我从一个函数返回这个,我的理解是,将创建一个副本,并删除原始文件,因此我将不再拥有该文件
我可以堆分配并返回指针,但我非常喜欢没有原始指针的解决方案。我不允许使用boost或C++11
我的最佳想法是定义一个误导性的副本构造函数:
TempFile(TempFile& rhs) {
mName = rhs.mName;
rhs.mName = "";
}
这应该是可行的,但它是有害的,并且几乎肯定会在以后引起问题。如果您不能使用c++11,那么您可以使用
std::auto_ptr
。它现在已被弃用,因此如果您的公司开始使用C++11,您将收到弃用警告。解决方案是编写您自己的共享ptr:
#包括
结构X{
~X(){
你可以写你自己版本的lighweight吗?把复制操作符和赋值操作符设为私有。
#include <memory>
struct X{
~X() {
std::cout << "~X";
}
};
std::auto_ptr<X> foo() {
std::auto_ptr<X> px(new X);
return px;
}
int main()
{
std::auto_ptr<X> px = foo();
}