当前位置: 代码迷 >> C++ >> c++中关于变量的施用
  详细解决方案

c++中关于变量的施用

热度:1654   发布时间:2013-02-26 00:00:00.0
c++中关于变量的使用
在c++中类的构造函数中初始化一些变量,方便,该类的其他函数调用,经过测试,不可以,但是我想使用静态的变量,使其有初值,这样每次使用的时候都不需要再次创建变量,分配内存,节省空间,但是最后却不好释放空间,有谁有比较好的方法吗?

------解决方案--------------------------------------------------------
上去直接定义一个全局变量
创建一次,只有一个内存空间,节省空间

转而想想,这个全局的作用域是不是也忒大了点儿,哪个地方都能访问到。
那就改成静态全局变量吧
创建一次,只有一个内存空间,节省空间

乍一想,虽然是静态全局变量,但该文件里的任何地方都可以访问但,作用域还是稍微大了点儿
只需要该类的函数可以访问即可
再改成类的静态数据成员
创建一次,只有一个内存空间,节省空间

这样貌似可以达到要求了
可是内存怎么释放呢?静态数据可是程序一启动就分配好空间的啊,释放不了的啊啊啊啊

lz的问题是不是这样的:
这些数据占内存很大,又是必须用到的,所以用的时候只想在内存中存在一份,其它的函数都可用访问到即可了。
等用完了,这些数据没用了,当然不能让他们占着内存了


何不这样做:
定义一个结构体S,用来表示这些所需要的变量。
然后在你要用的类中,定义一个这个结构体的静态指针static S *p_S;
第一次用的时候为这些变量申请空间,以后都用这个静态指针访问。
不用的时候,通过这个指针把这块内存释放掉。

愚见,楼下多多指教。
------解决方案--------------------------------------------------------
Explicit Initialization
C++ supports two forms of explicit initialization. 

Supplying an initializer list in parentheses:
String sFileName( "FILE.DAT" );

The items in the parenthesized list are considered arguments to the class constructor. This form of initialization enables initialization of an object with more than one value and can also be used in conjunction with the new operator. For example:

Rect *pRect = new Rect( 10, 15, 24, 97 );

Supplying a single initializer using the equal-sign initialization syntax. For example:
String sFileName = "FILE.DAT";

Although the preceding example works the same way as the example shown for String in the first list item, the syntax is not adaptable to use with objects allocated on the free store.

The single expression on the right of the equal sign is taken as the argument to the class’s copy constructor; therefore, it must be a type that can be converted to the class type.

Note that because the equal sign (=) in the context of initialization is different from an assignment operator, overloading operator= has no effect on initialization.

The equal-sign initialization syntax is different from the function-style syntax, even though the generated code is identical in most cases. The difference is that when the equal-sign syntax is used, the compiler has to behave as if the following sequence of events were taking place: 

Creating a temporary object of the same type as the object being initialized.


Copying the temporary object to the object. 
The constructor must be accessible before the compiler can perform these steps. Even though the compiler can eliminate the temporary creation and copy steps in most cases, an inaccessible copy constructor causes equal-sign initialization to fail. Consider the following example:
  相关解决方案