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();
}