为什么下面的程序会挂起?

时间:2011-02-17 08:25:20

标签: c++

现在我已经有了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; }
};

2 个答案:

答案 0 :(得分:5)

您必须只使用delete分配的new个指针。您将一个字符串常量传递给DumbPointer,它具有静态分配。

答案 1 :(得分:0)

除了Frederik的评论之外,我还要补充说,绝对没有理由为智能指针分配字符串常量。

由于此处绝对没有要删除的内容,只需将其分配给普通的旧char*指针即可。同样,没有什么需要删除或清理。