现在我已经有了SmartPointers,我决定尝试使用DumbPointers,它在析构函数中调用“delete”非常困难。决定继续使用DumbPointer在SmartPointer中存储数组的测试,我回忆起之前的错误并尝试了这个:
DumbPointer<char> dumbPointer = "Hello World\0";
对于“可能不是指针或正确指针?”的未定义原因,它会导致程序挂起。当然,我想知道为什么,着眼于解决这个问题。我现在将在下面提供非常复杂的DumbPointer代码(也许我应该去睡觉):(让我再次向你保证:析构函数被调用)
#pragma once
#include "stdafx.h"
template <typename T> class DumbPointer
{
private:
T* myPtr;
public:
T* Value() { return myPtr; }
DumbPointer(const DumbPointer<T>& a)
{ throw new "No assignments between DumbPointer."; }
DumbPointer(T* ptr) { myPtr = ptr; }
DumbPointer(T value) { myPtr = &value; }
~DumbPointer() { delete myPtr; }
operator T*() { return myPtr; }
T* operator ->() { return myPtr; }
};
答案 0 :(得分:5)
您必须只使用delete
分配的new
个指针。您将一个字符串常量传递给DumbPointer,它具有静态分配。
答案 1 :(得分:0)
除了Frederik的评论之外,我还要补充说,绝对没有理由为智能指针分配字符串常量。
由于此处绝对没有要删除的内容,只需将其分配给普通的旧char*
指针即可。同样,没有什么需要删除或清理。