【发布时间】:2015-01-15 20:07:51
【问题描述】:
是否创建了某种共享指针?
这是一个 XY 问题。我的最终目的是在我的类中声明一个private 变量,它是一个指针,但在public 函数中分配和填充一个数组并将指针返回到private 变量。我怎样才能合法地将函数中分配的变量保持在范围内,而不仅仅是让它处于某种准状态。下面的代码是否实际上将函数中分配的内存传递给接收返回值的指针,或者内存只是挂起? main() 中对delete 的最终调用是否实际上取消分配returned_data 指向的内存,就好像内存本身已使用以下语句分配:returned_data = new char [15]?
最后,我真的需要将其扩展为像char ** 这样的二维指针。我知道编译器需要以某种方式被告知数组的至少一个维度,所以这可能是不可能的。
class MyClass
{
private:
char *returned_data;
public:
char *fetch_data();
};
MyClass::fetch_data()
{
char *data_pointer;
data_pointer = new char [15];
strcpy(data_pointer, "Hello_World!");
return data_pointer;
};
main()
{
MyClass ClassName;
ClassName.returned_data = ClassName.fetch_data();
// Do whatever
delete [] ClassName.returned_data;
};
我刚刚恢复我的编程速度,因为我的编程已经有很多年了,所以代码中可能存在缺陷。这给出了总体思路。这不是我使用的实际代码,因为该代码与我的应用程序中的其他代码混合在一起。欢迎任何更正/建议。
【问题讨论】:
-
为什么不直接使用
std::string来保存字符串值呢?然后,如果您需要“许多”字符串,std::vector<std::string>将是一个不错的选择。 -
函数返回的any局部变量如何保持在作用域内?
-
“范围”适用于名称,而不适用于对象或值。
-
@MikeSeymour:不,范围和生命周期是两个不同的东西。范围是名称可见的程序文本区域。生命周期是对象存在的执行时间的持续时间。如果您将代码行与运行时执行相关联,它们恰好与自动对象密切相关,但它们仍然是截然不同的概念。
-
这看起来仍然不正确。我无法从
main()访问private变量,可以吗?