检测指针是否指向......的方法,究竟在哪里?

时间:2011-05-01 15:45:20

标签: c++ pointers

char* cc = "Something string like";
char* ccn = new char[2];
ccn[0] = 'a';
ccn[1] = '\0';
cout << cc;

第二个指针,为了防止内存泄漏,应该是delete[]'但是如何检测指针是否实际指向新的内存(如第一行中的那个)?第一个字符串在哪里创建?

2 个答案:

答案 0 :(得分:8)

不,您不能,并且您不应该以期望您能够这样做的方式设计您的应用程序。关于创建第一个字符串的位置的问题 - 答案是“适合编译器的地方” - 它没有被C ++标准指定。

解决这个问题的明显方法是不使用char数组,而是使用std :: strings。

答案 1 :(得分:0)

在标准C ++中,无法单独从原始指针了解相关资源(如果有)的分配方式。

您可以使用智能指针,因为它们会传递资源所有权信息以及原始指针值。例如:

template <typename T>
struct noop_deleter {
    void operator()(T *p) {}
};

boost::shared_array<const char> cc("Something string like", noop_deleter<char>());
boost::shared_array<char> ccn(new char[2]);

ccn[0] = 'a';
ccn[1] = 0;
cout << cc.get();