C++ C+中指针成员初始化的最佳实践+;98

C++ C+中指针成员初始化的最佳实践+;98,c++,pointers,constructor,c++98,C++,Pointers,Constructor,C++98,假设我们有以下非常简单的类: class Item { public: Item(){}; virtual ~Item(){}; }; 类ItemHolder,它保存一个指向Item实例的指针。我希望ItemHolder只保存一个指向实际数据的指针,而不在内部复制任何内容。因此,我想这就是ItemHolder应该是什么样子: class ItemHolder { public: ItemHolder(){ Q = NULL; } I

假设我们有以下非常简单的类:

class Item {
 public: 
    Item(){};
    virtual ~Item(){};
};
ItemHolder
,它保存一个指向
Item
实例的指针。我希望
ItemHolder
只保存一个指向实际数据的指针,而不在内部复制任何内容。因此,我想这就是
ItemHolder
应该是什么样子:

class ItemHolder {
public:
    ItemHolder(){
        Q = NULL;
    }

    ItemHolder(Item &QQ){
        Q = &QQ;
    }

    virtual ~ItemHolder() {
        // Don't delete Q!
        // The caller is responsible for the fate of Q...
    }

private:
    Item *Q; 

};
然而,我猜想这个设计会受到某些病态的影响,在C++11中,这些病态是通过智能指针处理的。例如,可以预期以下代码也会删除
a
,但事实并非如此:

Item *a = new Item();
ItemHolder *q = new ItemHolder(*a);      
delete q; 
此外,我经常遇到以下构造函数模式:

ItemHolder(const Item &QQ){
  Q = new Item(QQ);
}
伴随着这样的析构函数:

virtual ~ItemHolder() {
  if (Q != NULL){
    delete Q;
    Q = NULL;
  }
}

所有这些都可能(也将)产生关于谁负责各种对象的内存管理的模糊性。在C++98中实例化指针时,通常采用的最佳实践是什么(假设我不想使用
new
或复制构造函数创建其他变量的任何副本)是否有参考成员?这取决于
项目持有人
项目
之间的预期关系及其各自的生命周期。候选:
std::shared_ptr
std::unique_ptr
当然还有参考成员(当物品持有者与物品的生命周期无关时)。如果你不想对储存时间负责(也不想使用智能指针),我会通过指针:
物品持有者(物品*QQ)
。很明显,两个持有者持有相同的项目,而其中一个是通过复制构造函数从otherpimpl习惯用法创建的@BaummitAugen我不认为推荐成员会起作用,因为他们必须指出一些东西。。。